サーチ…


構文

  • (* {}}}})*)(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