YouTube上看到了一个2004年版的SICP讲解
看完解释器那一个视频后,对解释器中的Eval和Apply有了基本的认识于是想开始直接写一个简单lisp的解释器
我的理解是:
Eval是来求表达式的值的;
Apply 则是用来求函数值的;
什么是表达式 ? atom 或者 a list of expression
atom 包括 symbol number 还有 string
number 和 string 都是代表它们自己
symbol 代表一个变量(variable) 它需要绑定一个值(value) 或者是一个number,string 或者 一个函数
所以综上:
Eval 根据一些规则来求表达式的值
1.是number 或 string 吗? 是就返回它们因为它们就代表它们本身
2.是 if , define....... 这些需要特殊考虑的值吗? 是就执行它们特殊的语法
3.是函数调用吗? 是则利用Apply来进行函数调用,同时Apply也需要Eval来得到函数和值
举个例子,eval 的过程如下:
1 (eval '(* (+
1 2 3)
2))
2
3 (apply (eval
'*) (map eval '((+
1 2 3)
2)))
4
5 (apply [primitive *] (list
6 2))
6
7 ;====>
12
4.都不是则报错
参考
转载于:https://www.cnblogs.com/tclan126/p/8040566.html
相关资源:数据结构—成绩单生成器