码迷,mamicode.com
首页 > 其他好文 > 详细

写一个简单的lisp解释器(1)

时间:2017-12-15 00:43:12      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:报错   数值   atom   comment   基本   过程   https   pos   自己   

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.都不是则报错

 

参考

写一个简单的lisp解释器(1)

标签:报错   数值   atom   comment   基本   过程   https   pos   自己   

原文地址:http://www.cnblogs.com/tclan126/p/8040566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!