我正在书中阅读有关本地定义的内容,并且遇到了这个例子-
(local ((define (f x) (+ x 5))
(define (g alon)
(cond
[(empty? alon) empty]
[else (cons (f (first alon)) (g (rest alon)))])))
(g (list 1 2 3)))
到底是什么local
在这里做吗?
local
记录在here http://docs.racket-lang.org/htdp-langs/advanced.html?q=local#%28form._%28%28lib._lang%2Fhtdp-advanced..rkt%29._local%29%29作为 HtDP 语言之一的一部分或here http://docs.racket-lang.org/reference/local.html?q=local作为local
模块。让我们依次看看每一个。第一个是 HtDP 中的:
(local [definition ...] expression)
对表达式中使用的相关定义进行分组。每个定义可以是定义或定义结构。计算 local 时,按顺序计算每个定义,最后计算主体表达式。只有局部中的表达式(包括定义和表达式的右侧)可以引用定义所定义的名称。如果本地定义的名称与顶级绑定相同,则内部名称会“隐藏”外部名称。也就是说,在本地内部,对该名称的任何引用都指的是内部名称。
接下来,就是local
module:
(local [definition ...] body ...+)
与 letrec-syntaxes+values 类似,只不过绑定的表达方式与顶层或模块主体中的相同:使用 Define、define-values、define-syntax、struct 等。定义与非定义区分开来。通过部分扩展定义形式来定义(参见部分扩展)。与在顶层或模块主体中一样,开始包装序列被拼接到定义序列中。
因此,根据所使用的语言/模块,您会知道哪些local
是你找到的那个。显然,这不是标准的特殊形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)