我是一名自学 Common Lisp 的初学者。假设我们有一个列表
((1 20)(2 30)(5 40))
.
给定值 2
我们希望我们的函数在列表中搜索并返回
(2 30)
.或者如果给定值 5
它应该返回 (5 40)
.你明白了。
通常我们可以使用像这样的谓词
(defun isIndexp (n point)
(eq n (car point)))
为查找函数返回 T 或 NIL。但问题是如何将参数传递给谓词 isIndexp
?我尝试传递一个参数 n
到谓词函数 isIndexp
的 find
但是代码会抛出一些错误,因为 isIndexp
应该有 2 个参数。不知道怎么说find
isIndexp
的第二个参数将成为 points
的一个元素.
(defun isIndexPresent (n points)
(find (isIndexp n) points))
mapcar
可能用于将列表转换为另一个列表 (1 2 5)
然后找到元素2
的位置然后使用该位置提取 (2 30)
从我们的原始列表中。但我想知道是否可以简单地使用 find-if
来完成功能。
最佳答案
您可以使用 lambda 表达式来创建您想要的谓词:
(defun isIndexPresent (n points)
(find-if (lambda (x) (isIndexp n x))
points))
您还可以使用 find
和 :key
选项:
(defun isIndexPresent (n points)
(find n points :key #'car))
或者,由于您的点
列表是一个关联列表,您可以使用:
(defun isIndexPresent (n points)
(assoc n points))
关于lisp - 如何将 find-if 与带参数的谓词一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468468/