loops
클로저에서 반복문 덩어리들을 죄다 살펴보자.
tutorial point에는 4가지 반복문이 소개되고 있다.
while doseq dotimes loop
while
(while(expression)
(do
codeblock))
while문의 expression이 true인 동안만 codeblock을 실행시키는 것이다.
(let [x 10 y (atom 0)]
(while (< @y x)
(do
(println @y)
(swap! y inc))))
0
1
2
3
4
5
6
7
8
9
nil
doseq
(doseq (sequence)
statement#1)
doseq는 'foreach'문과 비슷하다. 일단 보면서 foreach문을 연상하자.
(def seq [1 2 3 4 5 6 7])
(defn go [seq]
(doseq [n seq]
(println n)))
(go seq)
1
2
3
4
5
6
7
nil
dotimes
(dotimes [n 10]
(println n))
1
2
3
4
5
6
7
8
9
nil
횟수만큼 index가 돈다고 생각하면 된다.
loop
loop [binding]
(condition
(statement)
(recur (binding)))
loop는 for-loop를 말하는 것이 아님. loop은 let처럼 값을 바인딩하고 recursion포인트를 지정한다. (그러니 재귀로 돌아갈 곳을 지정한다)
(loop [x 10]
(if (< x 1)
x
(recur (- x 1))))
0
댓글 없음:
댓글 쓰기