【发布时间】:2019-09-24 00:15:37
【问题描述】:
我对 Lisp 语言有点陌生,我正在尝试编写一个函数来修剪并返回列表的一部分。我输入的代码如下:
(defun trim-to (symbol list)
(cond
((null list) 0)
((equal symbol (car list)) (cons symbol (cdr list))
(t (trim-to (cdr list))))))
运行函数的代码是:
(trim-to 'c '(a b c d e))
它应该输出(c d e),但它只返回NIL。知道我的代码做错了什么吗?
【问题讨论】:
-
您的意思是
'(),而不是基本情况下的0?当找到symbol时,为什么将列表前面的cons回到该列表的cdr上?对trim-to的最后一次呼叫是否遗漏了什么? -
我这样做是希望它只会在列表的后面和符号上的字符,但我想我知道这是什么问题。最后一行是如果在列表的第一个位置找不到字符(如迭代器),则继续前进
-
检查递归调用的参数:需要多少个参数,你有多少个?
-
缩进你的代码。它没有正确缩进。然后检查代码,看看它是否有意义。你的 Lisp 也可能有 TRACE 和 STEP...
标签: list lisp common-lisp