Clojure의 :Clojure의 시퀀스와 일치하지 않습니까?
1:13 user=> (first (conj '(1 2 3) 4))
4
1:14 user=> (first (conj [1 2 3] 4))
1
; . . .
1:17 user=> (first (conj (seq [1 2 3]) 4))
4
내가 무슨 일이 일어나고 있는지 이해하지만,이 작품은 다르게해야?
Clojure의 :Clojure의 시퀀스와 일치하지 않습니까?
1:13 user=> (first (conj '(1 2 3) 4))
4
1:14 user=> (first (conj [1 2 3] 4))
1
; . . .
1:17 user=> (first (conj (seq [1 2 3]) 4))
4
내가 무슨 일이 일어나고 있는지 이해하지만,이 작품은 다르게해야?
문서 :
접속사 [OIN]. xs 'added'가 포함 된 새 모음을 반환합니다. (conj nil item)은 (item)을 반환합니다. '추가'는 구체적인 유형에 따라 이 다른 '장소'에서 발생할 수 있습니다.
벡터 끝 부분에 요소를 추가하는 것이 더 효율적이지만 목록 시작 부분에서는 요소를 추가하는 것이 더 효율적입니다. conj
은 데이터 구조에 가장 효율적인 것을 사용합니다. 당신이주는 예, '(1 2 3)
및 (seq [1 2 3])
에서
모두 ISeq
(documentation for seq?
참조), [1 2 3]
하지 않는 동안 구현합니다.
Clojure의 conj
은 궁극적으로 기본 데이터 구조에서 cons
메서드 (cons
함수와 혼동하지 말아야합니다.이 메서드는 내부 클래스 코드입니다)를 호출합니다. 벡터 (PersistentVector
)의 경우 cons
은 끝에 요소를 추가하고 목록은 앞에 추가합니다 (PersistentList
의 cons
메서드는 새 요소를 머리로, 기존 목록을 꼬리로 사용하여 새 목록을 반환 함) .
예를 들어,'(cons 4 [1 2 3])'는 요소를 추가하지 않고 앞에 붙이면 결과가'(4 1 2 3)이됩니다.)'. 나머지 대답은 절대적으로 옳습니다. –
당신은 맞습니다, Zach, Clojure의'cons' 함수 ('Clojure.lang.RT/cons'에서 구현)는 PersistentVector, PersistentList 등에서 구현 된'cons' 메소드와 다릅니다. – Gert
아, 이제 이해하겠습니다. 말하자면, 핵심 함수'cons'를 말하는 것 같습니다. –
를 보면 당신은 그 접속사가 목록 및 벡터와 다르게 작동 볼 수 있습니다.
conj는 추가 된 항목을 목록의 앞과 벡터의 끝에 넣습니다.
는 또한 몇 가지 좋은 예제를 가지고 Clojure API conj
보는 것이 좋습니다. ClojureDocs 전반적인 Clojure 명령에는 아주 좋은 예가 몇 가지 있습니다. conj
(clojure.org)에서 대
나는 올해 5 월부터 Clojure를 배웠다. Clojure 이전에 Lisp과 비슷한 언어를 배운 적이 없기 때문에 이처럼 연습 문제를 매우 유용하게 생각했습니다. – octopusgrabbus