【SICP归纳】4 模式匹配和以规则为基础的代换
在书中符号数据一节中,作者写了关于微积分的演算规则的程序。这是一个很程序化的程序,我们所做的是在讲这些(数学)规则翻译成计算机语言。因为它有程序化的行为和结构,那么存在其他的方法使书写这个程序更加清晰吗?这些规则都具有左右两侧。左侧是我们想要采取的导数的表达式,有右边则是其的替代。
用可以匹配的模式,和能够代换的框架,可以得到新的表达式。所以这意味着模式是对源表达式的匹配,并且规则的应用的结果是去产生一个新的表达式,而这个表达式是通过实例化一个框架来传入的目标参数。这就是所谓的实例化。而整体范围上这就是由规则所描述的过程。
我们试图找出解决一类问题的解决方案而不是一个个例的解决方案。书中采用的是关于负数运算的例子。在这个例子中,作者很好的封装了实例化、结构控制等思想,并且是用各自的规则进行的单独封装。
所以尽管是一个复杂的程序,但是每个复杂的程序都是由大量的简单片段所构成。这里的递归模式倒是很复杂,但明智的一点便是不去想这件事。如果总是想着要做的事情的实际的模式,我们便会变得很困惑。也许这并不是一项很好的实践。这些模式很困难,但我们没必要去想它们。关键是有一个好的编程技巧和优良的设计,并且知道什么不用去想。
没有必要知道每一个过程都该如何去执行,或者也可以去尝试这些模式。无论如何,这已经演变为编程这一层次上的递归,不断的将问题分解。
作者举了一个字典的例子:
在扩展字典时,我不得不去用一个模式、一个基准、一本字典。这个模式就是一个模式变量。我想要去找出这个模式变量的名字并且看看它是否存在,如果不存在则添加一个新的,如果存在,那么这便是我要找的字。当然,这是建立在这是我所期待的字典时。(比如说,我要查一个汉字的意思,却去成语词典中查则成语词典不是我所期望的。)
所以如果打开任何程序,我们所要找的就是它们中的一些小块,并且这一切都很容易。至于什么叫做简化的表达式,在复合表达式中,所有的片段都是简化的,并且这些规则会应用于它们的结果。对于所有的简化表达式,仅仅是用了所有的规则——去简化它们。所以简化表达式的规范是任何表达式通过所有这些规则而被分解出的简化的片段。
感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。
为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp
版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。