[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS]
[R5RS]
Common Lispからの輸入です。それぞれ以下のように展開されます。
(dotimes (variable limit result) body …) ==> (do ((tlimit limit) (variable 0 (+ variable 1))) ((>= variable tlimit) result) body …) (dolist (variable lexpr result) body …) ==> (begin (for-each (lambda (variable) body …) lexpr) (let ((variable '())) result)) |
=>
var body …
=>
var body …
Var は識別子でguardは一つの引数をとる手続きです。
最初の形式ではまずexprが評価され、もしそれが真値を返したら body … が評価されます。そしてexprが真値を返す 限り繰り返されます。
2番目の形式では、body … で有効な変数varを 作成し、exprの結果に束縛します。
最後の形式では、expr の返り値が guard に渡されこの 結果が真値である限り body … が繰り返されます。 変数 var は expr の結果に束縛されます。
while
自体の返り値は不定です。
(let ((a '(0 1 2 3 4))) (while (pair? a) (write (pop! a)))) ⇒ prints "01234" (let ((a '(0 1 2 3 #f 5 6))) (while (pop! a) integer? => var (write var))) ⇒ prints "0123" |
=>
var body …
while
の条件を逆にしたものです。 つまり、
最初の形式ではexprが真値を返すまで body … を
繰り返します。2番目の形式ではexprの結果がguard に渡され
それが真値を返すまで繰り返します。 Varはexpr返り値に
束縛されます。
(guard を省いた2番目の形式ではvarは常に#f
へ
束縛されるため、あまり意味がありません。)
until
自体の返り値は不定です。
(let ((a '(0 1 2 3 4))) (until (null? a) (write (pop! a)))) ⇒ prints "01234" (until (read-char) eof-object? => ch (write-char ch)) ⇒ reads from stdin and writes char until EOF is read |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.