gpt4 book ai didi

在 defun 中使用 cond 进行 Lisp 评估

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

这里是 Lisp 菜鸟。

CL-USER> (defun my-if (a b c)
(cond (a b)
(t c)))

CL-USER> (my-if t (print 1) (print 2))
1
2
1

我没想到会得到 2,因为如果第一个为真,则不应评估 cond 中的第二个子句:

CL-USER> (cond (t (print 1))
(t (print 2)))
1
1

这就是我们需要宏的原因,还是我犯了其他错误?

最佳答案

Common Lisp 中函数的参数在进入函数之前被求值。当评估 (print 1) 时,它会打印 1 并返回 1。当评估 (print 2) 时,它会打印 2 并返回 212 进入函数。它返回 1 作为答案。

要做你想做的事,你需要写一个宏:

CL-USER> (defmacro my-if (a b c)
`(cond (,a ,b)
(t ,c)))
MY-IF
CL-USER> (my-if t (print 1) (print 2))

1
1

关于在 defun 中使用 cond 进行 Lisp 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232796/

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