开发者社区> nomasp> 正文

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

简介:
+关注继续查看

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

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

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

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

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

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

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



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


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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)
注:代码生成的项目集规范簇、ACTION GOTO表的顺序可能和课本、教材、参考答案的顺序不同,但这并不影响分析过程的正确性,毕竟机器是按规律办事的😄
40 0
词法分析器的设计与实现
加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
31 0
【C语言操作符多图详解】——“讲述你所未知的操作符细节”(下)
【C语言操作符多图详解】——“讲述你所未知的操作符细节”(下)
37 0
【C语言操作符多图详解】——“讲述你所未知的操作符细节”(上)
【C语言操作符多图详解】——“讲述你所未知的操作符细节”(上)
52 0
迅速学会字符串查找与替换 | 带你学《Java面向对象编程》之三十三
在日常的文本操作中经常会碰到查找与替换的操作,作为和文本并无不同的字符串同样也有相应的、丰富的操作方法。
1095 0
fbh
less学习-模式匹配和导引表达式(带参数混合2)
有些情况下,我们想根据传入的参数来改变混合的默认呈现,比如下面这个例子: .mixin (@s, @color) { ..
955 0
+关注
nomasp
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
数据+算法定义新世界
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载