如何编写lisp函数以使用谓词

时间:2017-10-01 20:09:53

标签: common-lisp

例如,我应该输入的是第一个#' oddp'(1 2 3),它应该找到第一个奇数返回列表,所以我认为我需要做什么是写一个函数只有一个参数列表,但我只知道找到列表中的第一个元素,那么如何在我的代码中使用条件

 (defun finfirst(list)(cond((null list) nil)

如果我完成了这个,那么它会告诉我我需要两个参数,我只是不知道我该怎么做这个功能,只是给我一些暗示

1 个答案:

答案 0 :(得分:1)

如果只需要您描述的功能,则可以使用功能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))