【SICP归纳】4 模式匹配和以规则为基础的代换

简介:

在书中符号数据一节中,作者写了关于微积分的演算规则的程序。这是一个很程序化的程序,我们所做的是在讲这些(数学)规则翻译成计算机语言。因为它有程序化的行为和结构,那么存在其他的方法使书写这个程序更加清晰吗?这些规则都具有左右两侧。左侧是我们想要采取的导数的表达式,有右边则是其的替代。

用可以匹配的模式,和能够代换的框架,可以得到新的表达式。所以这意味着模式是对源表达式的匹配,并且规则的应用的结果是去产生一个新的表达式,而这个表达式是通过实例化一个框架来传入的目标参数。这就是所谓的实例化。而整体范围上这就是由规则所描述的过程。

我们试图找出解决一类问题的解决方案而不是一个个例的解决方案。书中采用的是关于负数运算的例子。在这个例子中,作者很好的封装了实例化、结构控制等思想,并且是用各自的规则进行的单独封装。

所以尽管是一个复杂的程序,但是每个复杂的程序都是由大量的简单片段所构成。这里的递归模式倒是很复杂,但明智的一点便是不去想这件事。如果总是想着要做的事情的实际的模式,我们便会变得很困惑。也许这并不是一项很好的实践。这些模式很困难,但我们没必要去想它们。关键是有一个好的编程技巧和优良的设计,并且知道什么不用去想。

没有必要知道每一个过程都该如何去执行,或者也可以去尝试这些模式。无论如何,这已经演变为编程这一层次上的递归,不断的将问题分解。

作者举了一个字典的例子:
在扩展字典时,我不得不去用一个模式、一个基准、一本字典。这个模式就是一个模式变量。我想要去找出这个模式变量的名字并且看看它是否存在,如果不存在则添加一个新的,如果存在,那么这便是我要找的字。当然,这是建立在这是我所期待的字典时。(比如说,我要查一个汉字的意思,却去成语词典中查则成语词典不是我所期望的。)

所以如果打开任何程序,我们所要找的就是它们中的一些小块,并且这一切都很容易。至于什么叫做简化的表达式,在复合表达式中,所有的片段都是简化的,并且这些规则会应用于它们的结果。对于所有的简化表达式,仅仅是用了所有的规则——去简化它们。所以简化表达式的规范是任何表达式通过所有这些规则而被分解出的简化的片段。



感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


目录
相关文章
|
15天前
|
自然语言处理 算法 编译器
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
151 0
|
14天前
编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)
编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)
16 0
|
15天前
|
算法
运算符的妙用以及部分机理解析
运算符的妙用以及部分机理解析
40 0
|
10月前
|
程序员
相见恨晚的Matlab编程小技巧(2)-代码怎么做到逻辑清晰?——巧用注释符“%“
        本文将以教程的形式详细介绍Matlab中两个常用符号“%”和“%%”的作用。初学者可以通过此文掌握这两个符号的用法,为Matlab编程打下坚实的基础。
|
存储 自然语言处理
词法分析器的设计与实现
加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
163 0
|
存储 Java
你能用几句话解释面向对象?(中)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
你能用几句话解释面向对象?(中)
|
XML Java 数据格式
你能用几句话解释面向对象?(下)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
113 0
你能用几句话解释面向对象?(下)
|
存储 编译器
你能用几句话解释面向对象?(上)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
179 0
你能用几句话解释面向对象?(上)