将列表与公共LISP结合使用

将列表与公共LISP结合使用,lisp,common-lisp,Lisp,Common Lisp,我只是从LISP开始,就像刚刚打开书一样,我已经读了两页了。我正在努力理解什么是可以接受的fn呼叫,什么是不可以接受的fn呼叫。每次我试图执行 (1 2 3 4) 我得到一个非法的fn呼叫错误 同样的道理也适用于 (cdr (1 2 3 4)) (first (1 2 3 4)) (a b c d) CL程序是否无法返回列表?如何使用这些函数或打印列表?如果重要的话,我正在使用SLIME实现。LISP与我以前使用过的任何东西都大不相同,我想确保我在概念上理解它 如果将列表用作常量,则需要引用

我只是从LISP开始,就像刚刚打开书一样,我已经读了两页了。我正在努力理解什么是可以接受的fn呼叫,什么是不可以接受的fn呼叫。每次我试图执行

(1 2 3 4)
我得到一个非法的fn呼叫错误 同样的道理也适用于

(cdr (1 2 3 4))
(first (1 2 3 4))
(a b c d)

CL程序是否无法返回列表?如何使用这些函数或打印列表?如果重要的话,我正在使用SLIME实现。LISP与我以前使用过的任何东西都大不相同,我想确保我在概念上理解它

如果将列表用作常量,则需要引用它们。否则,系统将尝试对参数
2 3 4
调用函数
1
,这将不起作用(请注意,函数调用的语法与列表相同)。你的例子应该是:

'(1 2 3 4)
(cdr '(1 2 3 4))
(first '(1 2 3 4))
'(a b c d)
好家伙

查找Seibel提供的实用公共Lisp。他是个好人,他把它放在网上免费阅读。它非常有用

Lisp的部分定义如下:

  • 看到列表时:使用列表的第一个元素,将其应用于列表的其余部分
但是等等:那么你是如何输入列表的呢?有两个功能可以执行此操作:和

例如,让我们在屏幕上打印一个列表:


对于
格式
*标准输出*
别名为
t
(至少在SBCL中是这样!),因此通常我们会看到
(格式t…

,或者显式创建一个列表,例如
(列表1 2 3 4)
要为OP澄清,第四个示例需要是
(列表“a”b“c”d)
当使用@Nick D建议的样式时。我听说过的唯一一个关于lisp的黏液是emacs开发环境,它可以与多个不同的实现交互。可能值得你研究一下你正在使用的实现。另外,如果你没有找到它,谷歌“Common lisp Hyperspec”.我建议也读第3页和第4页。哈哈,不错。我已经读了很多遍了,但这本书正在分门别类,并假设我能够执行上面的代码。这本书没有提到任何关于使用“虽然…”的内容@Rainer:从技术上讲不是。但作为一阶近似值-它的运行方式与一阶近似值类似。它没有。函数会被调用求值的参数。QUOTE是一种形式,它向求值器发出信号,表示所包含的形式是对自身求值的。因此,它的工作方式完全不同:它不是一个函数,不会被调用,它只采用一种形式,并且该形式会按原样作为值返回。@Rainer:(QUOTE(1 2 3 4))(1 2 3 4),看起来像调用了函数引号。是的,这是一种特殊形式。我试图为OP提供一个简化视图,而不讨论函数、宏和特殊形式之间的差异。它没有出现。如果调用了函数引号,则会计算参数并发生错误。QUOTE是si与函数调用类似,两者都是lisp形式。它们在计算方式上有很大不同(QUOTE是一种特殊形式,而函数调用是…函数调用)。
(format *standard-output* "~a" '(1 2 3 4))