我认为,在名称和约定方面,Scheme 更加一致和对称,这是客观真实的。简单的例子:True 和 false 是 #t 和 #f,而不是 Lisp 中的 T 和 nil。这样的细节会破坏交易吗?当然不是。但是,在早期,您必须记住的奇怪例外越少,您就越不会分心于重要的事情。
尽管您可以在 Scheme 中使用递归,但您也可以做一些闻起来不像递归的事情——例如一直流行的 named-let 习惯用法,每个人似乎都将其命名为“循环”:(let loop() .. .) - 甚至显式循环结构。
与 CL 一样,Scheme 不会强迫您具有功能性或不可变性。但是,如果您来自命令式背景,那么在不重新为变量赋值的情况下推进并最终让它“点击”您编写内容的方式是有益的。但是,如果您不想要那种灯泡体验,请随意设置!事情势在必行。
我建议您从 Scheme 开始,更具体地说,从 Racket(以前称为“PLT Scheme”)开始。它带有一个很棒的 IDE、非常好的文档和一个非常有用的邮件列表。它的库可让您编写真实世界的程序,以及通过 SICP 或 HtDP 等优秀书籍工作。