error:-6ren">
gpt4 book ai didi

scheme - 如何在 Scheme 中重写 "begin"?

转载 作者:行者123 更新时间:2023-12-04 00:43:21 25 4
gpt4 key购买 nike

Wikipedia文章解释,begin in Scheme 是一种库形式,可以使用更基本的形式重写,如 lambda .

但是你如何重写begin ,特别是考虑以下几点?

x
===> error: undefined identifier: x
(begin (define x 28) x)
===> 28
x
===> 28

最佳答案

你不能。问题是begin有两个作用:一是对一堆有副作用的表达式进行排序,二是用于“拼接”宏结果。您可以使用的事实begin上面的定义是第二个特性的结果,你不能自己写。

如果你真的想了解整个故事,那么你可以定义 begin作为使其仅执行排序方面的简单宏(并且确实可以这样实现,尽管通常不是)。但是,您需要添加对 begin 的显式识别s 拼接定义(顶级或内部)。这意味着宏实现很好,但它不能真正成为库,因为核心扩展器应该知道它。 (并且因为语言是词法​​范围的,核心扩展器没有好的方法来识别核心语言中未定义的 begin 。)

总结所有这些,你可以说 R5RS 只是在分类 begin 上是错误的。作为“库语法”,因为它不能在库中定义......但即使这样也不完全准确,因为 R5RS 将“库语法”定义为“派生表达式”。因此,真正错误的地方在于 begin 之一的事实。 s 两个面在其他地方实现,在扩展器中(用于定义上下文)。

另请注意,R6RS 澄清了整个交易:begin 的两个面孔是明确的,现在它是核心语言的一部分,不是“库形式”,甚至不是派生形式。

关于scheme - 如何在 Scheme 中重写 "begin"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683796/

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