lisp 最后一个元素函数形式
lisp last element functional form
大家好,我需要有关 lisp 功能的帮助。我应该创建:
(myLast L)
计算列表 L 的最后一个元素。
例如。 (myLast ‘(p a e g)) → g
我不能使用 lisp 的所有预定义形式,只能使用我们在 class 中给出的形式:
(atom X)
(quote X)
‘X
(eq X Y)
(cons X L)
(car L)
(cdr L)
(list A B C)
(if X Y Z)
(cond (C1 S1) (C2 S2) …… (Cn Sn))
我以为我输入的时候是对的:
(defun myLast (L)
(if ((eq L '()) (cdr L))
(car L)
(myLast (cdr L))))
但是我得到一个错误:
Error: The variable MYHW4.LISP is unbound.
Error signalled by EVAL
Backtrace: EVAL
Broken at SYSTEM::GCL-TOP-LEVEL.
我是 LISP 的新手,正在努力完成这项作业。我希望你们能帮助我,让我知道为什么我会收到这个错误,我对最后一个函数形式的逻辑是否正确?谢谢!
错误消息与您的代码无关。您可能键入了不带引号的 (load myhw4.lisp)
,在这种情况下,您的 Lisp 正确地认为您想要获取绑定到不存在的变量 myhw4.lisp
的值。您需要引用字符串 "like so"
。
此外,((eq L '()) ...)
是有问题的,因为第一种形式是 (eq ...)
,它不是函数或 lambda。这将发出错误信号..
上面说的让你的代码错了,不过你离错不远了。
您的代码存在多个问题。
您的括号过多。 ((eq L '())
是不允许的,因为运算符位置唯一允许的表达式是匿名函数。
您的 if
只有结果表达式,没有替代表达式。它不是最后一个表达式,所以它是死代码。
你做的car
,目前还没有在真正的位置码也。
尾表达式是递归,无条件执行。它被称为无限递归。
我想你的意思可能是这样的:
(defun myLast (list)
(if (null (cdr list))
(car list)
(myLast (cdr list))))
大家好,我需要有关 lisp 功能的帮助。我应该创建:
(myLast L) 计算列表 L 的最后一个元素。 例如。 (myLast ‘(p a e g)) → g
我不能使用 lisp 的所有预定义形式,只能使用我们在 class 中给出的形式:
(atom X)
(quote X)
‘X
(eq X Y)
(cons X L)
(car L)
(cdr L)
(list A B C)
(if X Y Z)
(cond (C1 S1) (C2 S2) …… (Cn Sn))
我以为我输入的时候是对的:
(defun myLast (L)
(if ((eq L '()) (cdr L))
(car L)
(myLast (cdr L))))
但是我得到一个错误:
Error: The variable MYHW4.LISP is unbound.
Error signalled by EVAL
Backtrace: EVAL
Broken at SYSTEM::GCL-TOP-LEVEL.
我是 LISP 的新手,正在努力完成这项作业。我希望你们能帮助我,让我知道为什么我会收到这个错误,我对最后一个函数形式的逻辑是否正确?谢谢!
错误消息与您的代码无关。您可能键入了不带引号的 (load myhw4.lisp)
,在这种情况下,您的 Lisp 正确地认为您想要获取绑定到不存在的变量 myhw4.lisp
的值。您需要引用字符串 "like so"
。
此外,((eq L '()) ...)
是有问题的,因为第一种形式是 (eq ...)
,它不是函数或 lambda。这将发出错误信号..
上面说的让你的代码错了,不过你离错不远了。
您的代码存在多个问题。
您的括号过多。 ((eq L '())
是不允许的,因为运算符位置唯一允许的表达式是匿名函数。
您的 if
只有结果表达式,没有替代表达式。它不是最后一个表达式,所以它是死代码。
你做的car
,目前还没有在真正的位置码也。
尾表达式是递归,无条件执行。它被称为无限递归。
我想你的意思可能是这样的:
(defun myLast (list)
(if (null (cdr list))
(car list)
(myLast (cdr list))))