我刚刚开始使用LISP,因为刚刚打开这本书,我只有两页。我试图了解什么是什么,什么是不可接受的fn调用。每次我尝试执行
(1 2 3 4)
我收到非法的fn调用错误
同样如此(cdr (1 2 3 4))
(first (1 2 3 4))
(a b c d)
CL程序无法返回列表吗?我将如何使用这些功能或打印列表?如果重要的话,我正在使用SLIME实现。 LISP与我以前合作的任何东西都非常不同,我想确保我从概念上得到它。
答案 0 :(得分:5)
如果您将列表用作常量,则需要引用列表。否则,系统将尝试在参数1
上调用函数2 3 4
,这将不起作用(请注意,函数调用与列表具有相同的语法)。你的例子应该是:
'(1 2 3 4)
(cdr '(1 2 3 4))
(first '(1 2 3 4))
'(a b c d)
答案 1 :(得分:-1)
Hooo boy。
通过Seibel查找Practical Common Lisp。他是一个很好的人,他把它放在网上免费阅读。它非常有用。
Lisp的部分定义是这条规则:
但是等一下:那你如何实际进入名单呢?有两个功能可以执行此操作:QUOTE和LIST。
例如,让我们在standard out上的屏幕上打印一个列表:
(format *standard-output* "~a" '(1 2 3 4))
对于format
,*standard-output*
别名为t
(好吧,至少在SBCL中!),所以我们通常会看到(format t ...
。