我正在阅读本书中的本地定义,我遇到了这个例子 -
(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)))
Run Code Online (Sandbox Code Playgroud)
这究竟local
做了什么?
local
在此处作为HtDP语言之一的一部分记录或在此处作为local
模块的一部分记录.让我们依次看每一个.首先是HtDP中的一个:
(local [definition ...] expression)
用于表达的组相关定义.每个定义可以是define或define-struct.在评估local时,将按顺序评估每个定义,最后评估body表达式.只有本地(包括定义和表达式的右侧)中的表达式可以引用定义定义的名称.如果在本地定义的名称与顶级绑定相同,则内部名称"遮蔽"外部名称.也就是说,在本地内部,对该名称的任何引用都是指内部引用.
接下来,local
模块中的那个:
(local [definition ...] body ...+)
像letrec-syntaxes + values一样,除了绑定以与顶层或模块体中相同的方式表达:使用define,define-values,define-syntax,struct等.定义区别于non通过部分扩展定义表格来定义(参见部分扩展).与顶层或模块体一样,开始包装的序列被拼接到定义序列中.
因此,根据使用的语言/模块,您将知道local
您找到的语言/模块.显然,它不是标准的特殊形式.