2012-08-10 4 views
2

저는 Clojure를 처음 접하고 기초를 배우려고합니다. 한 가지 깨닫게 된 것은 데이터 구조와 그들이 사용하는 함수 사이의 상관 관계를 이해하는 것입니다. 나는 새로운 벡터 만들 경우Clojure 데이터 구조 함수

는 예를 들어, 그런 다음

(def my-vec [1 2 3]) 

을 나는 my-vec를 호출 할 때 :

(my-vec) 

내가 얻을 :

ArityException Wrong number of args (0) passed to: PersistentVector clojure.lang.AFn.throwArity (AFn.java:437) 

내가 아는 나는 그 논쟁을 통과 할 수 있고 get를 부르는 것처럼 보이지만 어떻게 알 수 있습니까? 어떤 args가 PersistentVector을 취하고 어디서 문서를 찾을 수 있습니까?

(doc PersistentVector) 

을하지만 그 nil를 반환

나는 시도했다. 당신이 호출해야하므로

답변

4

문서는 여기 IPersistentVector에서 찾을 수있는 VEC에서 여러 개의 키를 잡고이 같은 표현을 쓰기 :을 5,특히 http://clojure.org/data_structures

: 벡터들은 지표 인 추정 및 n 번째 경우와 같이 그 자체가 룩업 하나 개의 인수, 즉 벡터의 인덱스의 함수이다의 IFN, 호출에 대한()를 구현한다.

+0

그게 도움이! 그래서'(my-vec)'또는'(my-vec 1)'을 호출 할 때'IPersistentVector'가'nth'를 호출하는'invoke()'를 호출합니까? –

+1

코드에서 답을 찾았습니다 : https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentVector.java#L593 –

-1

my-vec는 함수가 아닙니다 : my-vec하지 (my-vec)

시도 :이 벡터의 (nth my-vec i) GET에 대한 i 번째 요소입니다.

링크 : 당신이 Clojure의 벡터에 번호를 전달하면 nth

1

는 벡터가 자기의 인덱스로 해당 번호를 사용하고 해당 인덱스의 값을 반환합니다 :

user> (def my-vec [1 2 3 4 5]) 
#'user/my-vec 
user> (my-vec 2) 
3 

이 당신을 수 있습니다

user> (map my-vec [1 3 4]) 
(2 4 5) 
+0

흠 나는 누군가 당신의 진술과 혼란 스러울 것 같아서 '그 숫자를 보아라'라는 투표를했다. 숫자가 인덱스이고 벡터의 값이 아니라는 것을 분명히해라. – Ankur

+0

고정되어있다. 나는 누군가를 의심한다. 방금이 질문에 모든 대답을 투표했습니다. –

+0

아래쪽 투표를 사용하는 다른 대답은 잘못된 것입니다. 어쨌든 – Ankur