从 R. Kent Dybvig 编写的 Scheme 编程语言 中,我看到了 reverse 的定义:
procedure: (reverse list)
returns: a new list containing the elements of list in reverse order
libraries: (rnrs base), (rnrs)
reverse may be defined without error checks as follows.
(define reverse
(lambda (ls)
(let rev ([ls ls] [new '()])
(if (null? ls)
new
(rev (cdr ls) (cons (car ls) new))))))
(reverse '()) <graphic> ()
(reverse '(a b c)) <graphic> (c b a)
这一行中的
rev
是怎么回事?
(let rev ([ls ls] [new '()])
我对 let 定义的理解表明,关键字
let
和本地绑定列表之间不能有间隙。那么 rev
在 let
和绑定列表之间做什么?
嗯,我为自己的仓促感到后悔,看起来那里有一个名为 named let 的表单的链接。大家继续加油,避免危机。