使用命名的 let

在執行正文之前,普通的 let 形式將每個值繫結到其對應的識別符號。使用“命名 let”,然後可以遞迴地重新執行主體,為每個識別符號傳遞新值。

#lang racket
(let sum-of-list ([l '(1 2 3)])
  (if (null? l)
      0
      (+ (car l) (sum-of-list (cdr l)))))
;; => 15

通常使用 rec 作為 let 的名稱,它給出:

#lang racket
(let rec ([l '(1 2 3 4 5)])
  (if (null? l)
      0
      (+ (car l) (rec (cdr l)))))
;; => 15