gpt4 book ai didi

function - Common Lisp - 从数字列表构建大于、小于或等于给定数字的列表的函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:04 24 4
gpt4 key购买 nike

我在使用这个功能时遇到了问题,我想要一个功能返回给定数字的劣等数字列表。

到目前为止我做了什么,

(defun inf (n l)
(cond
((not l) 0)
((>= n (car l))(cons n (inf n(cdr l))))
(cons (car l) (inf n (cdr l))) ))

但它保持返回

(inf 12 '(12 5 3))
(12 12 10)

代替:

(inf 12 '(12 5 3 53 45))
(12 5 3)

我错过了什么?

最佳答案

首先,您发布的功能并不像您声称的那样运行。第一次调用返回 (12 12 12 . 0)(因为您在第一个 cond 子句中返回 0 而不是 nil)第二次调用引发异常

COND: variable CONS has no value

因为你的 cond 语法错误。

二、题意总结、题文及试题实现,指定三个不同的问题。

这是您的代码的修复程序(我替换了 car and cdrfirstrest出于教学原因):

(defun inf (n l)
(cond
((not l) ()) ; return empty list
((>= n (first l))
(cons n (inf n (rest l))))
(t
(cons (first l) (inf n (rest l))))))

如果这实际上是您想要的,您可以在更惯用方式:

(defun inf-1 (n l)
(and l (cons (max n (first l)) (inf-1 n (rest l)))))

甚至

(defun inf-2 (n l)
(mapcar (lambda (x) (max n x)) l))

如果你真的想要数字列表小于给定的数字,你可以使用remove :

(remove 12 '(12 5 3 100) :test #'<=)
==> (5 3)

关于function - Common Lisp - 从数字列表构建大于、小于或等于给定数字的列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51863448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com