- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这实际上是两个相关的问题。
(flet ((myfun (x) (+ x 3)))
(myfun 3))
(let ((myfun (lambda (x) (+ x 3))))
(funcall myfun 3))
(let ((myfun (lambda (x) (+ x 3))))
(myfun 3))
最佳答案
让我们从你的第二个问题开始:
- Are the examples A and B below equivalent?
funcall
)。
- What is the difference between flet and let for binding functions.
myfun
到一个功能对象,而第二个将一个普通的词法变量绑定(bind)到同一个功能对象。
(flet ((myfun (x) (when (< x 0) (return-from myfun 0)) (+ x 3))) (myfun -4))
,而
let
则不可能)。
flet
只是双胞胎特殊运营商的一部分
flet
,
labels
定义局部函数(与
macrolet
一起定义局部宏,参见
specification )。和
labels
运算符,您可以定义递归局部函数,这是 let 无法实现的。
关于common-lisp - flet 与 let+funcall 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752215/
考虑这段代码: (defclass test () ((test :initform nil :accessor test))) # (defvar *test* (make-instance 'te
我被 this old answer 中的代码激怒了解释为什么需要尖锐的引用,但我不明白的是为什么 funcall 似乎跳过了通常的范围规则。 (defun test () 'red) (flet (
为什么 funcall 没有语法糖?我们非常需要它。写一些像 (do-something arg0 arg1 arg2) 而不是 (funcall do-something arg0 arg1 a
我在 lisp 中有以下功能: (defun F(F) #'(lambda (n) (if (zerop n) (funcall F n) (1+
ANSI 通用语言。为什么我在最后一个案例中得到了其他答案? (list 1 2 3 nil) ; (1 2 3 nil) (funcall (function list) 1 2 3 nil) ;
我正在尝试将一个函数作为参数传递并在另一个函数中调用该函数。 我的一段代码如下所示: (defun getmove(strategy player board printflag) (setq mov
为什么我们必须使用 funcall 来调用 Common Lisp 中的高阶函数?例如,为什么我们必须使用: (defun foo (test-func args) (funcall test-f
Common Lisp HyperSpec在funcall条目中说, (funcall function arg1 arg2 ...) == (apply function arg1 arg2 ..
根据这份文件:http://cl-cookbook.sourceforge.net/functions.html (defun adder (n) (lambda (x) (+ x n))) (f
这实际上是两个相关的问题。 绑定(bind)函数的 flet 和 let 有什么区别。 下面的示例 A 和 B 是否等效? 一种) (flet ((myfun (x) (+ x 3))) (myf
我的功能: count = 0 def fake(x): global count print count count += 1 return x ** 4 + 10
我不明白 funcall 在这个例子中会做什么。我需要有关代码何时执行的解释。 (defun total-value (field L) "Answer average value of fiel
一边检查let over lambda我碰巧遇到 (defmacro! dlambda (&rest ds) `(lambda (&rest ,g!args) (case (car ,g
为什么在 elisp 中调用 lambda 有效,但应用它会引发错误? ELISP> (funcall (lambda ())) nil ELISP> (apply (lambda ())) ***
我正在阅读一本做作业的书,我明白使用#'是将变量视为函数而不是变量。但我对FUNCALL有点模糊。我知道 lisp 从变量中生成对象,所以函数名只是一个“指针”(可能是一个坏词,但希望你明白我的意思)
Lisp 的 APPLY 用于调用存储在列表中的计算参数的函数。(根据 Rainer 的评论修改) 例如,以下代码将 (list 1 2 3) 更改为 (+ 1 2 3)。 (apply #'+ '(
我是一名优秀的程序员,十分优秀!