小编sun*_*nwc的帖子

保罗格雷厄姆的ANSI Common Lisp中的组合示例

任何人都可以在Paul Graham的ANSI Common Lisp第110页中解释一个例子吗?

该示例尝试解释use&rest和lambda来创建函数式编程工具.其中之一是构成函数参数的函数.我找不到任何解释它是如何工作的东西.代码如下:

(defun compose (&rest fns)
  (destructuring-bind (fn1 . rest) (reverse fns)
    #'(lambda (&rest args)
        (reduce #'(lambda (v f) (funcall f v))
                rest
                :initial-value (apply fn1 args)))))
Run Code Online (Sandbox Code Playgroud)

用法是:

(mapcar (compose #'list #'round #'sqrt)
        '(4 9 16 25))
Run Code Online (Sandbox Code Playgroud)

输出是:

((2) (3) (4) (5))
Run Code Online (Sandbox Code Playgroud)

2号线和6号线对我来说看起来特别神奇.任何意见将不胜感激.

lisp reduce closures common-lisp paul-graham

13
推荐指数
3
解决办法
1339
查看次数

标签 统计

closures ×1

common-lisp ×1

lisp ×1

paul-graham ×1

reduce ×1