Scheme 与 Common Lisp 之间的差异

主要观点:介绍 Scheme 和 Common Lisp 的重要差异,包括语言规模、数字处理、尾调用优化、程序/数据等价性、多个命名空间及语法细节等方面。
关键信息:

  • 语言规模:Common Lisp 比 Scheme 大,包含更多常用功能,如包、数组等。
  • 数字:Scheme 对数字支持少,可只有浮点数,Common Lisp 要求支持多种数字类型,使程序更便携。
  • 尾调用优化:Scheme 需编译器优化尾调用,Common Lisp 虽无此规定但很多编译器会优化,Common Lisp 有丰富迭代原语。
  • 程序/数据等价性:Scheme 语言未定义程序内部表示,Common Lisp 要求某些形式等价,这是 Common Lisp 宏系统基础。
  • 多个命名空间:Common Lisp 有多个命名空间,全局函数名与其他数据对象名不同,Scheme 只有一个命名空间,在处理函数名作为普通值等方面两者有差异。
  • 语法细节:Scheme 用 define 定义过程,Common Lisp 用 defun ,且两者在 set! 和 setq 以及 map 等函数上有不同。
    重要细节:
  • 在 Common Lisp 中,(fun arg) 中 fun 的处理与普通变量不同,使用其函数值。
  • 在 Scheme 中,(define (f x y.z)) 语法非法,而 (define (f x y z)) 合法,作为数据两者相同。
  • 在 Common Lisp 中,(let ((list '(1 2 3))) (list list)) 中两个 list 含义不同,而在 Scheme 中可行。
  • 在 Scheme 中 (map car l) 可行,在 Common Lisp 中需用 (mapcar #'car l) ,因 Common Lisp 中通常变量 car 无普通值。
阅读 81
0 条评论