gpt4 book ai didi

lisp - 允许将特殊形式视为正常值会产生什么后果?

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

我发现在 Clojure 中,特殊形式不能作为参数传递或保存在变量中:

user=> (defn my-func 
[op]
(op 1 2 3))
#'user/my-func
user=> (my-func +)
6
user=> (my-func if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:5)
user=> (def my-if if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:9)

在 Racket /计划中:

> (define (my-func op)
(op 1 2 3))
> (my-func +)
6
> (my-func if)
if: bad syntax in: if
> (define my-if if)
*if: bad syntax in: if

太好了,我对此很好,我知道我可以编写一个函数来包装一个特殊的形式,然后传递该函数。

但我想知道为什么 Lisp 有这个限制,以及允许这样做会产生什么负面后果。他们是否有任何允许这样做的主要方言?

最佳答案

它使评估更复杂,编译更难。

如果你有一个表单 (a b c),那么你需要在运行时解析 a 的值,然后以某种方式将它应用到表单 bc

然后,一些有限数量的特殊形式和其他严格评估的更简单模型就消失了。

另请参阅:FEXPR

关于lisp - 允许将特殊形式视为正常值会产生什么后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332601/

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