我环顾四周,仍然不明白funcall是如何工作的。如果有人能给我一个关于如何处理和思考这个问题的建议,我将不胜感激。我知道"fun“必须是一个谓词函数,但在那之后我就卡住了
顺便说一句,当一个项被用作函数的参数时,如果该函数返回true,则该项满足该函数。
发布于 2020-01-27 05:40:12
(funcall #'+ 1 2 3 4 5 6 7 8)
; ^ -------+-------
; | |
; | Arguments
; Function
; returns 36发布于 2020-01-27 15:07:48
(funcall '+ 1 2 3)返回与(+ 1 2 3) => 6相同的结果
优点是在前一种情况下,函数可以是一个变量。
(setq fun '+)
(funcall fun 1 2 3) => 6应用一个类似的函数,其中参数被分组到一个列表中:
(apply '+ '(1 2 3)) => 6发布于 2020-01-28 14:05:21
针对您的问题:
(defun fun-satisfiers (pred-fun list)
(let ((acc nil))
(do ((l list (cdr l)))
((null l) (nreverse acc))
(if (funcall pred-fun (car l))
(setf acc (cons (car l) acc))))))这种函数已经作为filter存在于基本common-lisp中。
https://stackoverflow.com/questions/59922686
复制相似问题