common lisp 단점을 만들 목록에서 두 개의 기호,clojure 단점이 필요합 seq 하는 단점에?

StackOverflow https://stackoverflow.com/questions/3222789

문제

(부인-내의 중요성을 인식하고,리스트는 시퀀스입에 Clojure)

에서 공통적인 단점 기능을 결합하기 위해 사용될 수 있 두 개의 기호 목록으로:

(def s 'x)
(def l 'y)
(cons s l)

에 clojure-할 수 있는 단점만에 시퀀스에서 이용 되지 않은 확장된 작업으로 두 개의 기호입니다.그래서를 작성해야 합:

(def s 'x)
(def l 'y)
(cons s '(l))

은 거기에 높은 수준의 패턴에 Clojure 이것을 설명하는 사이에 차이 Common LISP 과 Clojure?

도움이 되었습니까?

해결책

에 Clojure 과는 달리,전통적인 Lisps 목록을 사용하지 않는 기본 데이터는 구조입니다.데이터 구조물을 구현 할 수 있습니다. ISeq 인터페이스는 다른 데이터의 구조는 주신-수 있도록 동일한 기능에 액세스하는 요소에서 각.(나열 이미 구현이다. seq? 지 여부를 확인 뭔가를 구현하는 ISeq.(seq? '(1 2)), (seq? [1 2])) Clojure 단순히 다르게 작용(좋은 이유),는 경우 cons 사용 순서(실제로는 형식 clojure.lang.Cons)의 건설 a(seq b) 이 반환됩니다.(a 는 arg1 b arg2)물론,기호하지 않고 이용할 수 없 ISeq.

Clojure.org/sequences

시퀀스에 스크린/이야기에 의해 풍부한 마크 그러나 참고 rest 변경되며,이 행동은 지금 next, 고 lazy-cons 로 대체되었습니다 lazy-seqcons.

clojure.랭.RT

다른 팁

공통 Lisp 단점에서는 두 개의 슬롯이있는 레코드와 유사한 소위 셀 셀을 생성합니다. 'CAR'및 'CDR'.

셀의 두 슬롯에 아무 것도 넣을 수 있습니다.

셀은 목록을 작성하는 데 사용됩니다.그러나 정당 셀과 함께 모든 종류의 데이터 구조를 만들 수 있습니다 : 나무, 그래프, 다양한 유형의 특수 목록, ...

LISP의 구현은 매우 효율적인 셀을 제공하기 위해 매우 최적화되어 있습니다.

LISP 목록은 정확도 셀을 사용하는 일반적인 방법 일뿐입니다 ( Rainer의 설명 ).Clojure는 셀 셀을 갖는 것으로 보이지 않는 것으로 여겨지는 것으로 간주됩니다 (두건 아래 비슷한 무언가가 숨길 수 있지만).Clojure cons는 잘못된 노래로이므로 실제로 prepend라는 이름으로 지정되어야합니다.

Clojure 2 요소 벡터의 사용이 바람직합니다. [:a :b].후드 아래의 작은 벡터는 Java 배열로 구현되며 매우 간단하고 빠릅니다.

(cons :a '(:b)) (또는 (cons :a (cons :b nil)))의 짧은 핸드는 list : (list :a :b)입니다.

당신이 말할 때

> (cons 'a 'b)

에 common lisp 당신 목록을 얻을지 점 쌍: (a . b), 반면,결과

> (cons 'a (cons 'b nil))

은 점 쌍 (a . ( b . nil)).

에서 첫 번째 목록 cdr() 의하지 않은 목록이기 때문에,여기에서 bnil, 을 만들고,부적절한 목록입니다.적절한 목록으로 종료 되어야 합니다 nil.따라서 더 높은 순서와 같은 기능 mapcar() 과 친구가 작동하지 않습니다,그러나 우리는 저장하는 단점-다.나는 디자이너의 Clojure 제거 기능을 혼란 때문에 그것을 일으키는 원인이 될 수 있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top