2011-12-11 3 views
0

편집 :왜 Clojure는 하나의 인수 만 가져야한다고 생각합니까?

이 질문에 대한 답변은 루프 매개 변수가 아닌 기능을보고 있습니다.

다음 두 함수 중 두 번째로, 왜 반복이 하나의 인수 만 전달된다고 생각하는지 이해할 수 없습니다.

CompilerException : 인수가 일치하지 않아 예상되는 인수가 1 args, got : 2, 컴파일 중 : (/ home/cnorton/projects/clojure/clj_in_action/mr1/src/mr1.clj : 84)

잘못된 정보가 표시되지 않습니다.

(loop [mov moves] ...) 

이 코드 단편 외부 함수 범위 movesmov에 결합되어

(defn determine-rover-move 
    [rover-coord mov] 

    (println rover-coord mov) 
    (cond 
     (= \L mov) (assoc rover-coord 0 (adj-compass-posL (first rover-coord))) 
     (= \R mov) (assoc rover-coord 0 (adj-compass-posR (first rover-coord))) 
     (= \M mov) (mov-rover rover-coord) 

    )) 


(defn execute-each-move 
    [moves rover-coord] 
    (loop [mov moves] 
     (if (nil? mov) 
      rover-coord 
      (recur (rest moves) (determine-rover-move rover-coord mov))))) 
+1

지금 확인해 보겠습니다. 루프에는 하나의 인수 만 있습니다. 함수 매개 변수를 살펴 보았습니다. – octopusgrabbus

+1

의견 대신 자신의 질문에 대한 대답을 답으로 제공 할 수도 있습니다. –

+0

사실, 나는 갈 생각이었고, 자신의 질문에 대답하는 쪽지는 주석을 사용하는 것이 더 좋다고했습니다. – octopusgrabbus

답변

3

중요한 부분은 여기 단면도이다. recur의 사용은 loop 내부에 있으므로, recurloop 정의에 따라 하나의 매개 변수만을 필요로합니다.

+0

"이동"은 기술적으로 Clojure Var에서와 같이 var가 아니라 "execute-each-move"함수 호출에 의해 제공된 값에 바인딩 된 심볼 –

+0

답변과 의견을 보내 주셔서 감사합니다. – octopusgrabbus

관련 문제