생성일: 2023년 08월 31일
수정일: 2023년 08월 31일
수정일: 2023년 08월 31일
4clojure - Simple closures (107)
문제
(= 256 ((__ 2) 16),
((__ 8) 2))
(= [1 8 27 64] (map (__ 3) [1 2 3 4]))
(= [1 2 4 8 16] (map #((__ %) 2) [0 1 2 3 4]))
풀이
(fn [x]
(fn [y]
(apply * (take x (iterate identity y)))))
풀이과정
high-order-function에 대한 문제 이다. lexical scope 로 함수를 반환하는 함수를 만들어서 계산하는 문제이다. 계산을 보면 첫번째 괄호의 횟수 만큼 뒤의 값을 곱하는 문제이다. 즉 1번 테스트를 예로 든다면
(* 16 16)
;; 256
(* 2 2 2 2 2 2 2 2)
;; 256
와 같은 계산이 되면 된다.
2번째 테스트로 다시 예를 든다면
[(* 1 1 1) (* 2 2 2) (* 3 3 3) (* 4 4 4)]
;; [1 8 27 64]
3번째 테스트는 아래와 같다
(apply * (take 0 (iterate identity 2)))
;; 1
(apply * (take 1 (iterate identity 2)))
;; 2
(apply * (take 2 (iterate identity 2)))
;; 4
(apply * (take 3 (iterate identity 2)))
;; 8
(apply * (take 4 (iterate identity 2)))
;; 16
근데 3번 테스트를 하면서 왜 1이 되는지는 잘 모르겠다.
(apply * '())
;; 1