생성일: 2023년 08월 31일
수정일: 2023년 08월 31일

4clojure - Simple closures (107)

  1. 문제
  2. 풀이
    1. 풀이과정

문제

(= 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
Tags: 4clojure