gpt4 book ai didi

common-lisp - 如何从 Common Lisp 中的函数符号中获取函数表达式?

转载 作者:行者123 更新时间:2023-12-04 00:08:02 24 4
gpt4 key购买 nike

我将展示我想要的 Common Lisp 中已经在 Elisp 中工作的东西:

(defun square (x)
(* x x))
(symbol-function 'square)
;; => (lambda (x) (* x x))

所以只要知道符号square,我想检索它的整个 body 。我看过 CL 的:

(function-lambda-expression #'square)
;; =>
(SB-INT:NAMED-LAMBDA SQUARE
(X)
(BLOCK SQUARE (* X X)))
NIL
SQUARE

返回结果接近我需要的结果,但它只是有时有效。大多数时候,我得到:

(function-lambda-expression #'list)
;; =>
NIL
T
LIST

有没有更可靠的功能可以做到这一点?我知道 swank-backend:arglist 这非常擅长检索论据,但我在那儿找不到正文的检索器。

更新

在普通的 lisp 中似乎不可能实现通用解决方案。这可以在 SLIME 中完成吗?假设我一直在运行 SLIME,并且所有代码都是通过那里加载的。代码可以比仅仅使用 SLIME 的 goto-definition 并从那里复制文本更可靠吗?

最佳答案

没有。标准不强制在符号处保存源代码,因此任何实现都可以选择不这样做(这也有性能影响)。

我猜你可能会通过声明 optimize (debug 3) 更频繁地得到这种行为,但我没有尝试过;它很可能取决于实现。

更新答案:由于您想实现与 Lisp 图像交互的编辑器功能,我想说使用 Lisp 交互模式(SLIME 中的 LIM)正是您需要的做。

关于common-lisp - 如何从 Common Lisp 中的函数符号中获取函数表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163718/

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