任何人都可以帮我写一下常用的lisp代码吗?如下: 创建一个查找第一个谓词列表函数,以返回满足条件的第一个元素已在列表中给出,如果没有元素可以满足则为零。
(find-first #'oddp '(1 2 3)) returns 1.
(find-first #'characterp '(1 2 3 4 5 6 #\a))
答案 0 :(得分:2)
递归:
(defun find-first (fn ls)
(cond ((null ls) nil)
((funcall fn (car ls)) (car ls))
(t (find-first fn (cdr ls)))))
迭代使用循环宏:
(defun find-first (fn ls)
(loop for item in ls
if (funcall fn item)
return item))
通过映射:
mapc 明确用于其副作用。
(defun find-first (fn ls)
(mapc (lambda (item)
(if (funcall fn item)
(return-from find-first item)))
ls))
功能:
(defun find-first (fn ls)
(car (remove-if-not fn ls)))
最后;非常直接使用CL标准功能 find-if :
find-first 实际上只是 find-if 的别名。
(defun find-first (fn ls)
(find-if fn ls))
答案 1 :(得分:-1)
(defun find-first (f l)
(if (funcall f (car l))
(car l)
(find-first f (cdr l))))