在《Scheme 编程语言》中,“(reverse)”中这个奇怪的“let”形式是什么?

问题描述 投票:0回答:1

从 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
和绑定列表之间做什么?

scheme lisp
1个回答
0
投票

嗯,我为自己的仓促感到后悔,看起来那里有一个名为 named let 的表单的链接。大家继续加油,避免危机。

© www.soinside.com 2019 - 2024. All rights reserved.