단점
cons컴퓨터 프로그래밍에서 (/ˈkznz/ 또는 /ɒk/ns/)는 리스프 프로그래밍 언어의 대부분의 방언에서 기본 함수입니다. cons 는 2개의 값 또는2개의 값에 대한 포인터를 유지하는 메모리개체를 구축합니다.이러한 오브젝트는 (cons)셀, 콘즈, 비원자 s-표현("NATS") 또는 (cons) 쌍이라고 불립니다.리스프 전문용어로, "to cons x on y"라는 표현은 다음과 같은 새로운 오브젝트를 구축하는 것을 의미합니다.(cons x y)결과 쌍은 왼쪽 절반(레지스터의 첫 번째 요소 또는 주소 부분의 내용)과 오른쪽 절반(레지스터의 두 번째 요소 또는 감소 부분의 내용)을 가진다.
이것은 주어진 인수를 통해 새로운 객체를 생성하는 생성자의 객체 지향 개념과 느슨하게 관련되며, 대수적 데이터 유형 시스템의 생성자 함수와 더 밀접하게 관련된다.
"cons"라는 단어와 "to cons on"과 같은 표현도 더 일반적인 기능 프로그래밍 용어의 일부입니다.특히 목록 처리와 관련하여 유사한 목적을 가진 연산자가 "cons"로 발음되는 경우가 있습니다.(좋은 예는::연산자(ML, Scala, F# 및 Elm) 또는:Haskell의 연산자. 목록의 선두에 요소를 추가합니다.)
사용하다
콘셀은 순서 있는 데이터 쌍을 유지하는 데 사용될 수 있지만, 보다 복잡한 복합 데이터 구조, 특히 목록과 이진 트리를 구성하는 데 더 일반적으로 사용됩니다.
순서쌍
예를 들어 Lisp 식(cons 1 2)는 왼쪽 절반(이른바 필드)에 1, 오른쪽 절반(필드)에 2를 유지하는 셀을 구성합니다.리스프 표기법에서 값은(cons 1 2)외관:
(1 . 2)
1과 2 사이의 점에 주의해 주세요.이는 S-식이 "리스트"가 아닌 "점 있는 쌍"(이른바 "cons 쌍")임을 나타냅니다.
리스트
Lisp에서는 리스트는 cons 쌍의 맨 위에 구현됩니다.구체적으로는 Lisp의 리스트 구조는 다음 중 하나입니다.
- 빈 리스트
()이것은 보통 라고 불리는 특별한 객체입니다.nil. - 범죄자 세포는 세포는
car리스트의 첫 번째 요소이며, 그 요소의cdr는 나머지 요소를 포함하는 목록입니다.
이것은 콘텐츠를 조작할 수 있는 단순하고 단일 링크된 목록 구조의 기초를 형성합니다.cons,car,그리고.cdr주의해 주세요.nil이 리스트는 유일하게 cons 쌍이 아닙니다.예를 들어 요소가 1, 2, 3인 목록을 생각해 보겠습니다.이러한 목록은 다음 3단계로 작성할 수 있습니다.
- 단점 3에 대하여
nil, 빈 리스트 - 결론에 대한 2번
- 결론에 대한 반대 1
이는 단일 표현에 해당합니다.
(단점 1 (단점 2 (단점 3 제로))) 또는 줄임말:
(목록. 1 2 3) 결과 값은 다음과 같습니다.
(1 . ( 2 . ( 3 . 0 ) )
예.
*---------------------------------------
이는 일반적으로 다음과 같이 약칭됩니다.
(1 2 3)
따라서,cons는 기존 링크 목록 앞에 하나의 요소를 추가하는 데 사용할 수 있습니다.예를 들어 x가 위에서 정의한 리스트라면(cons 5 x)다음 목록이 생성됩니다.
(5 1 2 3)
다른 유용한 목록 절차는 두 개의 기존 목록을 연결하는 것입니다(즉, 두 개의 목록을 하나의 목록으로 결합).
나무들
리프에만 데이터를 저장하는 바이너리 트리도 다음과 같이 쉽게 구성할 수 있습니다.cons예를 들어 코드:
(단점 (단점 1 2) (단점 3 4)) 결과는 다음과 같습니다.
((1 . 2) . (3 . 4))
예.
* / \ * * / \ / \ 1 2 3 4
기술적으로는 앞의 예의 리스트(1 2 3)도 바이너리 트리이며, 특히 불균형합니다.이것을 확인하려면 , 간단하게 그림을 정렬합니다.
*---------------------------------------
이하와 동등합니다.
* / \ 1 * / \ 2 * / \ 3 0
대화에 사용
단점은 명령형 프로그래밍 언어에서 사용되는 종류의 파괴적 연산을 사용하는 것이 아니라 메모리 할당의 일반적인 과정을 나타낼 수 있습니다.예를 들어 다음과 같습니다.
터무니없이 신경 쓰지 말고 부작용을 넣어 코드를 조금 더 빠르게 만들었다.
기능적 구현
Lisp는 1등급 함수를 가지고 있기 때문에 cons cell을 포함한 모든 데이터 구조를 함수를 사용하여 구현할 수 있습니다.예를 들어, 구성표:
(정의하다(단점x y) (람다(m) (m x y))) (정의하다(차z) (z (람다(p q) p))) (정의하다(CDRz) (z (람다(p q) q))) 이 기법은 처치 부호화라고 불립니다.cons 셀로서 기능을 사용하여 cons, car 및 cdr 연산을 재실장합니다.교회 부호화는 순수한 람다 미적분학의 데이터 구조를 정의하는 일반적인 방법입니다.이것은 스킴과 밀접하게 관련된 추상적이고 이론적인 계산 모델입니다.
이 구현은 학문적으로 흥미롭지만 불필요한 계산 비효율성을 초래할 뿐만 아니라 다른 스킴 절차와 구별할 수 없는 cons cell을 만들기 때문에 실용적이지 않다.
그러나, 같은 종류의 부호화는, 다른 종류의 [1]부호화보다 효율적인 것으로 판명되는, 변형을 가지는 보다 복잡한 대수 데이터 타입에 사용할 수 있다.또한 이 인코딩은 Java와 같은 변형이 없는 정적 유형의 언어로 구현 가능하며 람다 대신 인터페이스를 사용할 수 있다는 장점이 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Archived copy" (PDF). Archived from the original (PDF) on 2010-03-31. Retrieved 2009-03-01.
{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)