2011-04-21 7 views
0

내가 코드 줄이 포함 된 Clojure의 프로그램에서 일하고 있어요 :Clojure의 컴파일러 오류

(defn makeStruct 
"Take a line of input and return a starbucks-struct" 
[input] 
(let[(apply struct storeinfo (clojure.string/split input #","))] 
) 

)

을 그리고이 컴파일러 오류가 점점 오전 :

Exception in thread "main" java.lang.IllegalArgumentException: let requires an even number of forms in binding vector (clojureHW.clj:24) 

내가 아주 오전 새로운 clojure하고 내가 무엇을하고 있는지 잘 모르겠지만,이 경우 입력 문자열입니다 및 벡터로 내 구조체를 초기화하려면 분할입니다. let의 구문을 잘못 사용하고 있습니까? 이 지역 주민들에 값을 결합하기 때문에

답변

5

하자가, 형태의 짝수 번호가 필요합니다

(let [x 10, 
     y (+ x 20)] 
    ; do something with x and y here 
    (* x y)) 

여기 설명서를 읽어 보시기 바랍니다 : http://clojure.org/special_forms#Special%20Forms--(let%20%5Bbindings*%20%5D%20exprs*)

+0

예 해당 문서 페이지를 이미 이해했으며 이미 끝났습니다. let 문 (struct storeinfo 적용)과 (split input # ",") 두 부분을 계산합니다. 무엇이 잘못 되었습니까? –

+2

(struct storeinfo를 적용하십시오)은 내가 당신에게 준 예제에서 x 또는 y와 같은 기호가 아닙니다. Btw, (struct storeinfo 적용) 및 (split input # ",")이 아닌 struct storeinfo (clojure.string/split input # "",))를 적용하십시오. –

+0

내가 그것을 이해하는 방식으로, (struct storeinfo를 적용한다) storeinfo 구조체가 다음 명령문에 의해 분할 될 것입니다. (split input # ",") 잘못된 키워드/연산이 여기에 사용되도록 하시겠습니까? –

0

을 나는 여전히 혀짤배기 방식으로 처리 반환에 대한 오해가 있다고 생각 값과 바인딩.

괄호 안에있는 모든 표현식은 값이 다른 표현식에서 a에 의해 사용되거나 기호에 바인딩 될 수있는 값을 반환합니다. 단 하나의 표현이 있기 때문에

당신이 값에이

(apply struct storeinfo (clojure.string/split input #",")) 

이 returnes 있습니다. 그것의 아주 간단하게 단지 가장 많은 겉만 번지르르 한 사람을 셀 수 있습니다.

그리고 let의 나머지 부분에는 let의 형식 (표현식)이 홀수입니다.

0

let 표현의 "바인딩"측면에는 벡터 및 맵과 같은 기호 및 구조 해제 형식 만있을 수 있습니다. let의 바인딩면은 (apply struct storeinfo)과 같은 식을 평가할 수 없습니다.