gpt4 book ai didi

lisp - 在 lisp 中调用 flat 或 labels 函数

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

我是 common lisp (clisp-2.49) 的新手

我可以从不同的外部函数调用 fletlabels 函数吗?如果是这样,如何? (在源文件中)

除了最后一个打印语句,此代码在最后一行失去范围到 f(n) 之外有效。

(labels ((f (n)
(+ n 10)))
(print(f 5)))

(print (f 2))

最佳答案

没有。

创建的函数和宏 flet/labels/macroletlocal,即它们仅存在于表单内部,就像变量一样受约束 let是本地的。

如果你需要在函数外引用它们,你需要使用 defun/defmacro .

另一方面,flet 中可以有多种形式:

(flet ((logger (format-string &rest args)
(apply #'format t format-string args)
(fresh-line)))
(defun f1 (x)
(logger "Called f1 on ~S" x)
(- x))
(defun f2 (x)
(logger "Called f2 on ~S" x)
(1+ x)))
> (f1 10)
Called f1 on 10
==> -10
> (f2 4)
Called f2 on 4
==> 5
> (f1 (f2 (f1 5)))
Called f1 on 5
Called f2 on -5
Called f1 on -4
==> 4

您只能在 flet 体内使用 logger(IOW,在 f1f2 中),但不能在 flet 之外。

关于lisp - 在 lisp 中调用 flat 或 labels 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47081896/

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