首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用do、if和funcall来定义(满足fun lst),它返回满足函数的列表中的项的列表

使用do、if和funcall来定义(满足fun lst),它返回满足函数的列表中的项的列表
EN

Stack Overflow用户
提问于 2020-01-27 04:58:27
回答 3查看 130关注 0票数 0

我环顾四周,仍然不明白funcall是如何工作的。如果有人能给我一个关于如何处理和思考这个问题的建议,我将不胜感激。我知道"fun“必须是一个谓词函数,但在那之后我就卡住了

顺便说一句,当一个项被用作函数的参数时,如果该函数返回true,则该项满足该函数。

EN

回答 3

Stack Overflow用户

发布于 2020-01-27 05:40:12

代码语言:javascript
复制
(funcall #'+ 1 2 3 4 5 6 7 8)

;        ^   -------+-------
;        |          |
;        |          Arguments
;        Function

; returns 36
票数 2
EN

Stack Overflow用户

发布于 2020-01-27 15:07:48

(funcall '+ 1 2 3)返回与(+ 1 2 3) => 6相同的结果

优点是在前一种情况下,函数可以是一个变量。

代码语言:javascript
复制
(setq fun '+)
(funcall fun 1 2 3) => 6

应用一个类似的函数,其中参数被分组到一个列表中:

代码语言:javascript
复制
(apply '+ '(1 2 3)) => 6
票数 2
EN

Stack Overflow用户

发布于 2020-01-28 14:05:21

针对您的问题:

代码语言:javascript
复制
(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中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59922686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档