gpt4 book ai didi

emacs - 有没有办法在 Elisp 中编写函数来组合函数?

转载 作者:行者123 更新时间:2023-12-03 03:25:07 24 4
gpt4 key购买 nike

我想创建一个函数,它返回几个其他函数的组合,这样

(funcall (compose 'f 'g) x) == (f (g x))

我觉得我在这方面非常失败。迄今为止我最好的尝试:

(defun compose (funcs)
"composes several funcitons into one"
(lambda (arg)
(if funcs
(funcall (car funcs) (funcall (compose (cdr funcs)) arg))
arg)))

但由于某种原因,以下仍然返回 0:

(funcall (compose '(
(lambda (a) (* a 3))
(lambda (a) (+ a 2))
)) 0)

有办法解决吗?

最佳答案

您的代码需要词法作用域的 lambda,但 Emacs Lisp 默认情况下不支持。如果您使用 Emacs 24,请将 lexical-binding 设置为 t,您的示例将按编写的方式运行。

如果您使用的是较旧的 Emacs,则可以使用显式 lexical-let 形式创建词法作用域的 lambda:

(require 'cl)

(defun compose (funcs)
"composes several funcitons into one"
(lexical-let ((funcs funcs))
(lambda (arg)
(if funcs
(funcall (car funcs) (funcall (compose (cdr funcs)) arg))
arg))))

关于emacs - 有没有办法在 Elisp 中编写函数来组合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com