gpt4 book ai didi

functional-programming - 在 LISP 中是否可以访问函数的形式?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:48 24 4
gpt4 key购买 nike

假设我在全局定义一个函数:

(defun x (y) (1+ y)) ;; Edit: my first example was too complicated

是否有可能将函数 x 强制转换为如下列表:

(x (y) (1+ y))

提前致谢!

PS - @Danlei 的示例在带有特殊标志的 Clozure CL 中工作,但是有人知道如何让 FUNCTION-LAMBDA-EXPRESSION 在 SBCL 中工作吗?

最佳答案

你可以试试 FUNCTION-LAMBDA-EXPRESSION :

(function-lambda-expression #'foo)

但它不能保证有效(“......在所有情况下,实现都可以自由返回 ``nil,true,nil''......”)。

例如在 CCL 中:

CL-USER> (setq ccl:*save-definitions* t)
T
CL-USER> (defun x (x y) (+ x y))
X
CL-USER> (function-lambda-expression #'x)
(LAMBDA (X Y) (DECLARE (CCL::GLOBAL-FUNCTION-NAME X)) (BLOCK X (+ X Y)))
NIL
X

在 SBCL 中,您可以尝试 (setq sb-ext:*evaluator-mode* :interpret)(未经测试)。也许在 SBCL 中还有其他方法可以实现这一点(您可能会寻找 *save-definitions* 的模拟,甚至尝试不同的 OPTIMIZE 设置),但我没有了解他们。请注意,在将 *evaluator-mode* 设置为 :interpret 后,REPL 中输入的函数将不会被编译,因此您可能会遇到更差的性能。

关于functional-programming - 在 LISP 中是否可以访问函数的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844670/

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