본문 바로가기

프로그래밍 언어 노트/Clojure

[Clojure] conj 는 왜 list, vector에서 다르게 동작하는가.

Clojure 에서 conj 를 쓰는경우 list의 경우 앞에, vector의경우 뒤에 삽입된다.

 

 

왜 그런가 궁금했는데

conj 의 경우 해당 데이터타입에 맞는 최적(가장 빠른)의 방법으로 결합(conjoin)된다고 한다.

따라서 리스트의 경우 싱글 링크드 리스트 이기 때문에 가장 앞에 삽입되는것이 가장 빠르고

백터는 일종의 어레이이기때문에 뒤에 삽입되는것이 더 빠르다.

 

관련 링크.

https://medium.com/@greg_63957/conj-cons-concat-oh-my-1398a2981eab

 

Conj, Cons, Concat? Oh my!

Lists and collections are the basis of Clojure. But, as a Clojure noob, I was constantly getting back unexpected results from applying…

medium.com

https://stackoverflow.com/questions/17910673/difference-in-behavior-of-conj-on-vectors-and-lists-in-clojure

 

Difference in behavior of conj on vectors and lists in Clojure

I am new to clojure, initially i am going through Clojure.org and cheatbook . I want to know what is exact reason for different behavior of conj on list and vector. (conj [1 2 3] 4) [1 2 3 4] (c...

stackoverflow.com

 

 

# 2024.10.24 추가

좀더 상세한 설명을 가지는 에릭 노마드의 설명을 추가한다.

conj는 const time add 를 보장하는 인터페이스이고, 리스코프 치환원칙성에 따라 동작자체는 다르다는것

Why does Clojure's conj add to the end of vectors but the beginning of lists?

 

Why does Clojure's conj add to the end of vectors but the beginning of lists?

conj can be confusing if you're used to other languages. It is not a commonly defined operation. Most languages define common positional adding operations. conj, however, has more useful semantics. How do you use conj usefully if you can't guarantee the po

ericnormand.me

 

728x90