当我开始从Practical Common Lisp学习CL时,就像书中所说的那样,我开始使用Allegro CL编译器.我停止使用它,因为它的商业,但免费的位没有给我留下深刻的印象.它需要连接到远程服务器才能获得一些许可.
我切换到'clisp'并使用它.现在,我听说过SBCL并计划开始使用它.
所以,问题是:各种ANSI CL实现有何不同?使用一个在另一个上的任何实际经验?
谢谢.
我喜欢Clojure.困扰我的一个问题是我不知道如何实现懒惰的序列,或者它们是如何工作的.
我知道懒惰序列只评估序列中要求的项目.它是如何做到的?
从阅读关于Lisp的介绍材料,我现在认为以下内容是相同的:
(list 1 2 3)
'(1 2 3)
Run Code Online (Sandbox Code Playgroud)
但是,从我在Clojure和Emacs Lisp中使用引用形式时遇到的问题来看,它们并不相同.你能告诉我有什么区别吗?
我一直在阅读Doets和Eijck撰写的《 Haskell逻辑,数学和编程之路》(2004)。这似乎是一本受人尊敬的书,但是当我声称Haskell是Lisp家族的一员时,我感到震惊。这个准确吗?我将用S表达式,不纯函数和列表作为Lisps的特征,并将其作为唯一的复合数据结构。Haskell没有任何东西。该主张有什么理由?
有很多关于如何理解函数的教程,以及stackoverflow中的许多问题.然而,在阅读了The Little Schemer,几本书,教程,博客文章和stackoverflow主题之后,我仍然不知道这个简单问题的答案:"有什么关系?" 我明白如何理解一个功能,而不是"为什么?" 在它背后.
有人可以向我解释一下curried函数的实际用法(在每个函数只允许一个参数的语言之外,使用currying的必要性当然非常明显.)
编辑:考虑到TLS的一些例子,有什么好处
(define (action kind)
(lambda (a b)
(kind a b)))
Run Code Online (Sandbox Code Playgroud)
而不是
(define (action kind a b)
(kind a b))
Run Code Online (Sandbox Code Playgroud)
我只能看到更多的代码,没有更多的灵活性......
换句话说,是什么让一种语言变得纯洁?
例如,Smalltalk被认为是纯粹的面向对象语言.可以说Haskell和Lisp是纯函数式语言.
当我们说纯粹时,这是否意味着他们不具备其他编程范式(这远非事实),还是意味着它们被设计用于那种"纯粹的"X范式?
Emacs Lisp函数通常像这样开始:
(lambda () (interactive) ...
Run Code Online (Sandbox Code Playgroud)
"(互动)"有什么作用?
例如,#'functionname是否有必要?
我想我理解Lisp宏及其在编译阶段的作用.
但是在Python中,您可以将函数传递给另一个函数
def f(filename, g):
try:
fh = open(filename, "rb")
g(fh)
finally:
close(fh)
Run Code Online (Sandbox Code Playgroud)
所以,我们在这里得到懒惰的评价.我可以用宏做什么而不用函数作为第一类对象?