Java Lisp中的Pascal三角形

Java Lisp中的Pascal三角形,java,lisp,common-lisp,Java,Lisp,Common Lisp,我刚开始学习Lisp,我很难理解下面的内容: (除帕斯卡(n) (genrow n'(1))) (北面及北面) (when(2(长度l)) '(1) (反对者(+(左车)(左卡德雷))(纽罗(左卡德雷(()))) 我一直在看一些关于lisp的网站,但它仍然让人困惑。我所知道的唯一编程语言是Java。如果有人能用Java解释粗体部分的意思,我将不胜感激。Lisp使用前缀符号,因为在其他语言中通常是运算符(即+,-,>)的东西在Lisp中被视为函数(+1)相当于1+1在Java中。您可以将其视为使用

我刚开始学习Lisp,我很难理解下面的内容:

(除帕斯卡(n) (genrow n'(1))) (北面及北面) (when(<0n)//命令“when”与Java中的if类似吗? (印刷体l) (genrow(1-n)(cons 1(newrow l())) (德文纽罗(左) (如果(>2(长度l)) '(1) (反对者(+(左车)(左卡德雷))(纽罗(左卡德雷(())))
我一直在看一些关于lisp的网站,但它仍然让人困惑。我所知道的唯一编程语言是Java。如果有人能用Java解释粗体部分的意思,我将不胜感激。

Lisp使用前缀符号,因为在其他语言中通常是运算符(即+,-,>)的东西在Lisp中被视为函数(+1)相当于
1+1在Java中。您可以将其视为使用1和1作为参数调用add函数:
add(1,1)

所以
(>2(长度l))
相当于
2>长度(l)


”(1)
中的
告诉Lisp将以下内容视为文字。因此,与Lisp查找名为
1
的函数不同(如果没有反勾号,将发生这种情况),它返回一个包含1的列表作为元素。在Lisp中,一种等价的说法是
(quote(1))
,它返回包含1的文本列表。

因此,当我调用genrow方法时,我正好传递了n和一个列表。我刚才看到你也问了
什么时候
when
函数(实际上是一个宏)就像Java中的
if
语句。不同之处在于,在Lisp中,普通的
if
函数只有一个“then”语句,后跟一个“else”语句。
when
宏允许多个“then”语句。有关更多信息,请参阅。非常感谢您的帮助:D@nonex当谈到公共Lisp时,不应该指向elisp文档,CLHS是一个更好的参考。特别是当elisp与CL的定义不匹配时。Elisp的if接受多个else子句,而在CL中不是这样。 (defun pascal (n) (genrow n '(1))) (defun genrow (n l) (when (< 0 n) //is the command "when" something like if in Java? (print l) (genrow (1- n) (cons 1 (newrow l))))) (defun newrow (l) (if (> 2 (length l)) '(1) (cons (+ (car l) (cadr l)) (newrow (cdr l)))))