在lisp中写一个名为number(N)的函数,你必须使用一个非负整数N,并产生从1到包括N的所有整数的列表。
(defun数字(N) (if(< = N 0) …
的 IF通常具有通用语法,但也有例外 强>
通常在Lisps中使用Common Lisp if 运算符允许以下语法:
if
IF test-form then-form [else-form]
这意味着在Lisp中通常为零或一 其他形式 被允许。一个例子是 if 在Common Lisp中。
在Emacs Lisp中 否则,形式 被允许。 Emacs Lisp具有以下语法:
IF test-form then-form else-form*
这意味着在Emacs中Lisp为零或更多 否则,形式 被允许。
的 从而 强> :重要的是要提到你实际使用的是哪种语言和方言。
的 你的代码 强>
a)假设您使用Common Lisp 如果 句法。
你的代码:
(defun numbers (N) (if (<= N 0) nil (cons N nil) (numbers (- N 1)))
您的代码存在问题,即有多个else子句。您需要编写一个具有单个else子句的版本。
b)假设您使用Emacs Lisp 如果 具有多个else表单的语法。
在这里 (cons N nil) 表格是允许的,但没有效果。它的返回值没有使用,也没有副作用。你可以删除它,它没有任何区别。再说一遍:您需要如何将其效果与表单相结合 (numbers (- N 1)) 。
(cons N nil)
(numbers (- N 1))
的 语法错误:缺少右括号 强>
您的代码中还有另一个问题。 s表达式不完整 - &gt;缺少右括号:
如您所见,最后缺少一个右括号。
因此,Lisp无法读取您的代码。
通常有两种方法可以避免这个问题:
大多数人更喜欢后者。