gpt4 book ai didi

lisp - 如何将 find-if 与带参数的谓词一起使用

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

我是一名自学 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到谓词函数 isIndexpfind但是代码会抛出一些错误,因为 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/

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