Common lisp 如何编写lisp函数来使用谓词
例如,我应该在这里输入的是finfirst#'oddp'(1 2 3),它应该找到返回列表的第一个奇数,所以我想我需要做的是编写一个函数,它只有一个参数是list,但我只知道找到列表中的第一个元素,那么我如何在代码中使用该条件呢Common lisp 如何编写lisp函数来使用谓词,common-lisp,Common Lisp,例如,我应该在这里输入的是finfirst#'oddp'(1 2 3),它应该找到返回列表的第一个奇数,所以我想我需要做的是编写一个函数,它只有一个参数是list,但我只知道找到列表中的第一个元素,那么我如何在代码中使用该条件呢 (defun finfirst(list)(cond((null list) nil) 如果我完成了,它会告诉我,我需要两个参数,我只是不知道我应该为这个函数做什么,给我一些提示,如果你只是想要你描述的功能,你可以使用函数find if,例如: (find-if #
(defun finfirst(list)(cond((null list) nil)
如果我完成了,它会告诉我,我需要两个参数,我只是不知道我应该为这个函数做什么,给我一些提示,如果你只是想要你描述的功能,你可以使用函数find if,例如:
(find-if #'oddp '(1 2 3))
如果您想自己实现它,您可以这样做:
(defun finfirst (function list)
(cond
((null list) nil)
((funcall function (first list)) (first list))
(t (finfirst function (rest list)))))
(finfirst #'oddp '(1 2 3))
然后像这样使用它:
(defun finfirst (function list)
(cond
((null list) nil)
((funcall function (first list)) (first list))
(t (finfirst function (rest list)))))
(finfirst #'oddp '(1 2 3))
你有什么问题吗?是否将更多参数添加到参数列表?使用变量绑定函数?请编辑您的问题,更准确地描述您的问题。它告诉我在列表中找到满足列表中谓词的第一个元素,或者如果列表为空,则返回nil,但我不知道如何在代码中设置谓词?例如,
(defun测试元素(谓词元素)(funcall谓词元素))(测试元素#'oddp1);=>t
是的,我想可能是这样,但它应该像(finfirst#'odd(1 2 3))意味着找到第一个奇数元素将返回1,并且它将有另一个极限条件,如(finfirst#'characterp'(1 2 3 4#\a)它将返回其他内容Yes,但如果将元素绑定到变量元素
,则可以轻松地将其从返回谓词结果更改为传递给参数的元素?您知道,使用if
?