关于Common Lisp & Lisp REPL的几个问题

  1. 首先function的parameter/argument传值问题,是pass-by-value还是pass-by-reference,还是有其他机制呢,对于string literal,symbol,list是否有什么不同,以及传值过程中evaluation的规则是否有变化?

  2. 我之前只有认真学过C++以及相关的一些编译原理,关于REPL的原理没有研究过,Lisp里面的read syntax和print syntax对我来说是个新概念,Pratical Common Lisp也只是简单提了一下:REPL首先利用reader来读取text,然后转化成lisp object,后来就没怎么提了。 所以能否推荐一些更加底层/原理性的Lisp资料/书籍?目前我只简略看过Ansi Common Lisp和Practical Common Lisp,他们好像都更加偏重于教你如何使用,对原理只是提了一下。

当然Practical CL这本书我会继续读下去。

谢谢~ :laughing:

Lisp 全都是 pass by reference。没有特例。除了 special form 以外没有 evaluation 的特例。special form 只有这些

推荐 Anatomy of Lisp 怕你看不懂,而且不是针对 Common Lisp 讲的。还是 Common Lisp the Language, 2nd Edition 好了。要认真学的话全过一遍没有坏处。

Read 和 print 的讲解在 CLtL2 的 22 章,Input/Output。

但是编译器实现,内部表示,GC 实现这些深度主题当然还是 Anatomy of Lisp 值得看。5.11 节也讲了最基本的 print 和 read 的实现。别的编程语言这种级别的书根本没有

3 个赞