til
  • Introduction
  • Clojure
    • usage
    • lein
    • luminus
    • web
    • 4clojure
    • testing
  • Emacs-spacemacs
  • DB
    • mongodb
    • mysql
  • TDD study
    • 25장-테스트 주도 개발 패턴
    • 26-빨간막대패턴
    • 27-테스팅패턴
    • 28-초록막대패턴
    • 29-xUnit패턴
  • Util
  • Raft
    • 발표내용
    • 논문번역
  • Node.js
  • Security
    • 인코딩/디코딩
    • 암복호화 알고리즘
    • 공개키 알고리즘
  • 임시저장페이지
Powered by GitBook
On this page
  • nth 구현 (no.21)
  • 답
  • count 구현 (no.22)
  • 답 (loop, recur 활용)
  • reverse 구현 (no.23)
  1. Clojure

4clojure

nth 구현 (no.21)

  • nth를 쓰지 않고 nth를 구현해보기, 우선 nnth를 구현해봤다.

(defn nnth [c n]
  (if (= n 0)
    (first c)
    (nnth (rest c) (dec n))))

답

(fn [c n]
  (if (= n 0)
    (first c)
    (recur (rest c) (dec n))))
  • 익명함수로 수정, 재귀를 위해 recur를 사용

  • 다 풀고 다른 사람의 솔루션을 보았는데, 비슷하다.

count 구현 (no.22)

  • count를 쓰지 않고 count를 구현해보기, 우선 countt를 구현해봤다.

(defn countt
  ([c n]
  (if (empty? c)
    n
    (countt (rest c) (inc n))) )
  ([c]
    (countt c 0)))
  • 문제는 fn 노테이션을 잘 구현하지 못하겠는데, loop과 recur, 꼬리재귀를 이번 참에 잘 정리하고 가야겠다.

  • argument에 :or노테이션이 있는데, 이것도 잘 정리해봐야겠다.

답 (loop, recur 활용)

  • loop과 recur 사용

  • 다중 인자는 받지 않음 (fn 구문에서는 defn과 같은 노테이션이 지원되지도 않음)

(fn [c]
  (loop [cc c
         n 0]
    (if (empty? cc)
      n
      (recur (rest cc) (inc n)))))
  • 모범답안 풀이는 약간 충격적이었다. 아 이렇게해도 되는구나 ㅜㅜ

#(reduce + (map (constantly 1) %))

reverse 구현 (no.23)

reverse, rseq쓰지 않고 reverse 구현하기. 역시나 재귀를 쓰지 않고 간단히 할 방법을 찾고 있었는데... 그냥 into자체가 거꾸로 내뱉네;; 뭐지 into..?

;; 내가 푼 재귀

(fn [c]
  (loop [nl []
         cc c]
    (if (empty? cc)
      nl
      (recur (cons (first cc) nl) (rest cc)))))
;; into를 사용한 것
#(into () %)

예:
(#(into () %) [1 2 3 4 5])
(5 4 3 2 1)
  • into는 최대 3개의 인자를 받는데, 그 때마다 동작이 조금씩 다르니 참고하자.

PreviouswebNexttesting

Last updated 6 years ago

loop, recur, 꼬리재귀 내용은 =>

Clojure-usage
http://clojuredocs.org/clojure.core/into