본문 바로가기

프로그래밍 언어 노트/Clojure

[Clojure 연습] 4. 4Clojure Elementary 2

문제

#20 penultimate element

(fn [para-list] (last (drop-last para-list)))

 

다른 누구의 답에는 comp를 사용하였는데

(comp second reverse )

Comp는 중요해보인다.

풀이

Comp compare 가 아니라 composition이다.

일종의 함수조합을 만들어냄

((Comp f g) x) 라면 f(g(x)) 하는 함수 가 되는듯

 

문제

#35

7

풀이

 

 

문제

#36

[x 7  y 3 z 1]

풀이

 

 

문제

#37

"ABC"

풀이

 

 

문제

# 57

[5 4 3 2 1]

풀이

 

 

문제

#71 Rearranging code ->

last

풀이

->연산자는 진행순서를 고대로 나타내게 할수있음.

-> 연산자는 첫 x form을 계속하여 첫번째 인자로 삽입.

 

(first (.split (.replace (.toUpperCase "a b c d") "A" "X") " "))

 

(-> "a b c d" 
           .toUpperCase 
           (.replace "A" "X") 
           (.split " ") 
           first)

 

문제

#68 loop

[7 6 5 4 3]

풀이

Loop는 재귀(recur) 를 위한 루프를 제공해줌

 

문제

# 72 Rearranging code ->>

apply +

풀이

->>연산자는 진행순서를 고대로 나타내게 할수있음.

->> 연산자는 첫 x form을 계속하여 마지막 인자로 삽입.

 

(reduce +
               (take 10
                     (filter even?
                             (map #(* % %)
                                  (range)))))

 

(->> (range)
            (map #(* % %))
            (filter even?)
            (take 10)
            (reduce +))

 

 

Drop 는 숫자, 시퀀스를 받고 시퀀스에서 숫자만큼 drop

Take는 반대로 그만큼만 취함.

(drop 2 [1 2 3 4]) -> [3 4] (lazy)

(take 2 [1 2 3 4]) -> [1 2] (lazy

 

 

문제

#145 for

[1 5 9 13 17 21 25 29 33 37]            

(range 1 40 4) 으로 만들어됨

풀이

For는 시퀀스 반복(for-each와 비슷) 및 시쿼스 생성.

Rem은 나머지

Range의 경우 (range start end step)을 사용가능

Partition 은 시퀀스를 주어진 개수만큼가지는 리스트로 분할

(partition 2 (range 20)) -> ((0 1) (2 3) (4 5) (6 7) (8 9) (10 11) (12 13) (14 15) (16 17) (18 19))

 

 


728x90