| [ < ] | [ > ] | [ << ] | [ 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 May 28, 2012 using texi2html 1.82.