Macro DOLIST

UP


Macro DOLIST

Macro DOLIST

構文

dolist (var list-form [result-form]) declaration* {tag | statement}*
=> result*

引数と戻り値

var - シンボル
list-form - フォーム
result-form - フォーム
declaration - 宣言式。評価されません。
tag - goのタグ。評価されません。
statement - compound-form。下記の説明に従って評価されます。
result - もしreturnreturn-fromが実行されたときは、 そのフォームから渡された返却値であり、 それ以外の場合はresult-formによる返却値です。

定義

dolistは、リストの要素に対して繰り返しを行います。 dolistのボディ部はtagbodyNi似ています。 それはtagstatementが続くものが含まれます。

dolistlist-formを評価し、 それはリストでなければいけません。 そのあとボディ部がリストの各要素ごとに一度だけ実行され、 実行はtagstatementを順番に行われ、 その際にvarを各要素に束縛します。 そしてresult-formを評価します。 tagstatementにラベル付けされます。

result-formが実行された時点で、 varにはnilが束縛されています。

nilという名前の暗黙のblockが、 dolistのフォーム全体を囲みます。 return文は、それ以上の繰り返しを行うことなく ループを即座に終了させるときに使われ、 そのときの返却値は0や複数の値を指定できます。

varの束縛のスコープは、list-formを含みませんが result-formは含まれます。

dolistが各繰り返しごとにvarの 新しい束縛を確立するかどうか、 あるいはvarが一度束縛されてからその後の繰り返しで 代入されるのかどうかは 実装依存です。

例文

(setq temp-two '()) =>  NIL
(dolist (temp-one '(1 2 3 4) temp-two) (push temp-one temp-two)) =>  (4 3 2 1)

(setq temp-two 0) =>  0
(dolist (temp-one '(1 2 3 4)) (incf temp-two)) =>  NIL
temp-two =>  4

(dolist (x '(a b c d)) (prin1 x) (princ " ")) 
>>  A B C D 
=>  NIL

副作用

なし。

影響

なし。

例外

なし。

参考

do, dotimes, tagbody, 3.6. 横断の規則と副作用

備考

goは、dotimesのボディ部で tagによってラベル付けされた文へ 遷移を制御するために使用されます。


TOP, Github