2012-05-23 5 views
5

이 Clojure의 메이크업 가산기 예를 이해할 수 없다, 그러나 나는 다음과 같은 기본 예제 벽돌 벽에 부딪 :내가 Clojure의에 비트를 읽기 위해 노력하고있어

(defn make-adder [x] 
    (let [y x] 
    (fn [z] (+ y z)))) 
(def add2 (make-adder 2)) 
(add2 4) 
-> 6 

하는 것은 이해가 안 무엇 add2은 make-adder 함수에 숫자 4를 전달하는 방법이며,이 함수가 해당 숫자를 z에 할당하는 방법은 무엇입니까?

미리 감사드립니다.

답변

6

make-adder은 하나의 매개 변수 (z)를 사용하는 함수를 반환하고 make-adder에 전달 된 매개 변수는 y에 값을 할당하는 데 사용됩니다. add2는 (Y는 make-adder에서 파라미터에 할당 된 이후) make-adder로부터 반환 된 기능과 동일하게 설정 보인다 그래서 2 add2의 파라미터로 make-adder 평가 결과와 동일하게 설정된다

(fn [z] (+ 2 z)) 

추천 따라서 (add2 4)은 6으로 평가되는이 함수를 호출합니다. 도움이 되었습니까?

+0

완벽! 네, 도움이됩니다! 고마워요! – Deleteman

+1

나는 그 코드가 단지 코드를 복잡하게 만들 필요가 없다고 생각한다. – Kevin

+0

@Kevin : 맞다. 여기서는 유용하지 않다. –

3

내게는 흥미로운 문제를 해결하고있는 것 같습니다. (하자 바인딩없이 재)

귀하의 예를 확인 가산기 기능은

(defn make-adder [x] 
    "Returns a function that returns the sum of x and yet to be supplied z." 
    (fn [z] (+ z x)))) 

메이크업 가산기 이미 값으로 불렸다하는 X와 Z를 요약 함수를 반환합니다. 귀하의 예를 Clojure 부분 함수를 구현하는 믿습니다, 꽤 멋진 있습니다. 여기

은 함수를 반환 (그래서 우리는 ADD2에서 부분적으로 사용할 수 있습니다) 두 개의 매개 변수를 요약, 그리고 재 작성하여 메이크업 가산기 기능,

(defn make-adder 
    "Returns sum of x and y." 
    [x y] 
    (+ x y)) 

이며, 여기에 2 등으로 부분적인 사용 ADD2 다시 쓴입니다 x 매개 변수 :

(def add2 (partial make-adder 2)) 

내가 대답은 4, (add2 3)입니다 (add2 2)를 호출하는 경우는, 대답은 5 등이다.

+0

추가 설명 주셔서 감사합니다. 나는 아직 완전히 숨 막히게 새롭고, 따라서 나는 부분적인 개념에 익숙하지 않다. 내가 당신의 예를 완전히 이해하는 것이 조금 어렵다. – Deleteman

관련 문제