R6RS:翻訳:R6RS:11.16 Iteration

R6RS:翻訳:R6RS:11.16 Iteration

11.16 繰り返し

[syntax] (let <variable> <bindings> <body>)

「名前つき let」は let の構文上の変種で、一般的なループ構文を提供し、再帰を表現するのにも使うことができる。構文と意味論は通常の let とほぼ同じであるが、 <body> 中で <variable> が、仮引き数が変数群に束縛され本体部分が <body> に束縛された手続きに束縛される。そのため、 <variable> という名前の手続きを起動することで、 <body> の実行を繰り返すこともできる。

(let loop ((numbers ’(3 -2 1 6 -5))
           (nonneg ’())
           (neg ’()))
  (cond ((null? numbers) (list nonneg neg))
        ((>= (car numbers) 0)
         (loop (cdr numbers)
               (cons (car numbers) nonneg)
               neg))
        ((< (car numbers) 0)
         (loop (cdr numbers)
               nonneg
               (cons (car numbers) neg))))) 
                ⇒  ((6 1 3) (-5 -2))
More ...