생성일: 2019년 11월 06일
수정일: 2023년 10월 27일

4clojure - Implement range (34)

  1. 문제
  2. 풀이

문제

(= (__ 1 4) '(1 2 3))

(= (__ -2 2) '(-2 -1 0 1))

(= (__ 5 8) '(5 6 7))

제한: range

풀이

(fn [x y]
  (loop [lis [] cnt x]
    (if (= cnt y) (seq lis)
      (recur (conj lis cnt) (+ cnt 1)))))

recursive를 이용하여 문제를 풀었지만 어딘가 모르게 복잡한 느낌이 많이 들었다. 문제를 풀고 나서 다른 사람이 풀어낸 방식을 보니 take, iterate 함수를 이용하여 문제를 풀이한 것을 봤다. take는 collection의 원소를 원하는 갯수 만큼 가져오는 것이고 iterate는 함수의 계산되는 식을 거쳐서 계속적 인 반복을 하는 함수이다. 두 함수의 조합이 이 문제 풀이에 대한 좋은 조합이라고 생각 한다.

#(take (- %2 %1) (iterate inc %1))
Tags: 4clojure Today I Learn