수색…


통사론

  • (end-test-form result-form *) 선언 * {tag | statement} *) (do ({var |
  • (do * ({var | (var [init-form [step-form]))}) *) (end-test-form 결과 양식 *) 선언 * {tag | statement} *)
  • (dolist (var list-form [result-form]) 선언 * {tag | statement} *)
  • (dotimes (var count-form [result-form]) 선언 * {tag | statement} *)

dotimes 는 일부 매개 변수 값 아래의 0에서 단일 변수에 대한 정수 반복을위한 매크로입니다. simples 예제 중 하나는 다음과 같습니다.

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 는 목록을 통해 쉽게 순환하기 위해 만든 루핑 매크로입니다. 가장 간단한 용도 중 하나는 다음과 같습니다.

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

단순한 루프

루프 매크로에는 "단순"양식과 "확장 된"양식의 두 가지 양식이 있습니다. 확장 형식은 다른 문서 항목에서 다루지 만 단순 루프는 매우 기본적인 루프에 유용합니다.

간단한 루프 형식은 여러 양식을 취하고 루프가 return 또는 다른 종료 (예 : throw )를 사용하여 종료 될 때까지 반복합니다.

(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