common-lisp
基本ループ
サーチ…
構文
- (* {}}}})*)(end-test-form result-form *)宣言* {tag |ステートメント} *)
- (do *({var |(var [init-form [step-form]))})*)(end-test-form result-form *)宣言* {tag |ステートメント} *)
- (dolist(var list-form [result-form])宣言* {tag |ステートメント} *)
- (dotimes(var count-form [result-form])宣言* {tag |ステートメント} *)
点線
dotimes
は、あるパラメータ値の下の0からの単一の変数に対する整数反復のマクロです。シンプルな例の1つは次のとおりです。
CL-USER> (dotimes (i 5)
(print i))
0
1
2
3
4
NIL
私たち自身では提供していないので、 NIL
は戻り値であることに注意してください。変数は0から始まり、ループ全体を通して0からN-1の値になります。ループの後、変数はN:
CL-USER> (dotimes (i 5 i))
5
CL-USER> (defun 0-to-n (n)
(let ((list ()))
(dotimes (i n (nreverse list))
(push i list))))
0-TO-N
CL-USER> (0-to-n 5)
(0 1 2 3 4)
落書き者
dolist
は、リストを簡単にループするために作成されたループマクロdolist
。最も単純な用途の1つは次のようなものです:
CL-USER> (dolist (item '(a b c d))
(print item))
A
B
C
D
NIL ; returned value is NIL
戻り値を与えなかったので、 NIL
が返されます(そして、A、B、C、Dは*standard-output*
)。
dolist
は値を返すこともできます:
;;This may not be the most readable summing function.
(defun sum-list (list)
(let ((sum 0))
(dolist (var list sum)
(incf sum var))))
CL-USER> (sum-list (list 2 3 4))
9
単純ループ
ループマクロには、「シンプル」フォームと「拡張」フォームという2つのフォームがあります。拡張形式は別のドキュメンテーションのトピックでカバーされていますが、単純なループは非常に基本的なループに役立ちます。
シンプルなループフォームは、いくつかの形式をとり、ループがリターンまたは他の出口(たとえばスロー )を使用して終了するまで繰り返します。
(let ((x 0))
(loop
(print x)
(incf x)
(unless (< x 5)
(return))))
0
1
2
3
4
NIL
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow