doseq
foreach 문과 비슷하다. 각각의 요소(element)를 돈다(iterate). 중요한 것은 lazy sequence를 강제(force) 평가(evaluation)한다.
(doseq [n (range 10)] (println n)) 0 1 ~ 9
dotimes
일반 for문과 비슷하다. 숫자만큼 포문을 돈다.
(dotimes [i 10] (println i)) 0 1 ~ 9
while
단순 while문과 비슷
(def a (atom 0)) (while (< @a 10) (do (println @a) (swap! a inc))) 0 1 ~ 9
loop/recur
loop를 이용하여 재귀를 돌 범위를 정한다. recur을 이용하여 loop의 값을 바꾼다.
(loop [i 0] (if (< i 10) (do (println i) (recur (inc i))) i)) 0 1 ~ 9
defn/recur
함수를 재귀
함수 이름을 부르지 않고 recur을 사용하는 이유는 tail recursion때문이다.
(defn increase [i] (if (< i 10) (do (println i) (recur (inc i))) i)) (increase 0) 0 1 ~ 9
댓글 없음:
댓글 쓰기