【发布时间】:2018-06-27 22:26:41
【问题描述】:
在 Sublime Text 中使用 CLISP。
经验。在 CLISP 中:不到 1 年
我尝试解决这个练习已经有一段时间了......没有成功......正如你可能猜到的那样。
事实上,我必须创建一个函数来修改列表并只保留等于或大于给定数字的子列表(请看下面)
我必须工作的清单:
(setq liste '((a b) c (d) (e f) (e g x) f))
我应该找到这个结果:
(lenght 2 liste) => ((a b) (e f) (e g x))
liste => ((a b) (e f) (e g x))
这是我的代码:
(defun lenght(number liste)
(cond
((atom liste) nil)
((listp (car liste))
(rplacd liste (lenght number (cdr liste))) )
((<= (lenght number (car liste)) number)
(I don't know what to write) )
((lenght number (cdr liste))) ) )
如果你能给我一些线索,让我找到好的结果,那就太好了。
谢谢各位。
【问题讨论】:
-
这是作业吗?
-
请注意,
length是一个标准的 lisp 函数 - 您可能想要使用明显拼写错误的lenght以外的其他东西。 -
你不能改变像
'((a b) ...)这样的文字。您确定它应该改变列表,而不仅仅是用结果创建一个新列表吗?如果您尝试以您的方式删除第一个元素,您将遇到各种问题。制作一个使用元素创建新列表的函数要容易得多。您正在混合您的函数lenght和标准函数length,这是您应该用来检查元素长度的函数。 -
是的,这是作业,我先向老师寻求帮助,他告诉我他不明白为什么我被阻止了...他说我应该再添加一个“测试”会好的。但是我还没有找到我应该做的测试......我把这个函数称为'lenght'(有一个错误,对此感到抱歉)因为我刚刚从法语翻译了这个练习。是的,我必须直接改变列表,以免浪费空间地址。这是我正在做的章节的目标。这是一种在法语中被称为“opération chirurgicale”(外科手术?)的方法。非常感谢
标签: common-lisp clisp