단점

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 쌍")임을 나타냅니다.

리스트

목록(429613)의 콘셀 다이어그램은 다음과 같이 작성됩니다.cons:
(단점 42 (단점 69 (단점 613 제로))) 
로 써넣다list:
(목록. 42 69 613) 

Lisp에서는 리스트는 cons 쌍의 맨 위에 구현됩니다.구체적으로는 Lisp의 리스트 구조는 다음 중 하나입니다.

  1. 빈 리스트()이것은 보통 라고 불리는 특별한 객체입니다.nil.
  2. 범죄자 세포는 세포는car리스트의 첫 번째 요소이며, 그 요소의cdr는 나머지 요소를 포함하는 목록입니다.

이것은 콘텐츠를 조작할 수 있는 단순하고 단일 링크된 목록 구조의 기초를 형성합니다.cons,car,그리고.cdr주의해 주세요.nil이 리스트는 유일하게 cons 쌍이 아닙니다.예를 들어 요소가 1, 2, 3인 목록을 생각해 보겠습니다.이러한 목록은 다음 3단계로 작성할 수 있습니다.

  1. 단점 3에 대하여nil, 빈 리스트
  2. 결론에 대한 2번
  3. 결론에 대한 반대 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, carcdr 연산을 재실장합니다.교회 부호화는 순수한 람다 미적분학의 데이터 구조를 정의하는 일반적인 방법입니다.이것은 스킴과 밀접하게 관련된 추상적이고 이론적인 계산 모델입니다.

이 구현은 학문적으로 흥미롭지만 불필요한 계산 비효율성을 초래할 뿐만 아니라 다른 스킴 절차와 구별할 수 없는 cons cell을 만들기 때문에 실용적이지 않다.

그러나, 같은 종류의 부호화는, 다른 종류의 [1]부호화보다 효율적인 것으로 판명되는, 변형을 가지는 보다 복잡한 대수 데이터 타입에 사용할 수 있다.또한 이 인코딩은 Java와 같은 변형이 없는 정적 유형의 언어로 구현 가능하며 람다 대신 인터페이스를 사용할 수 있다는 장점이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Archived copy" (PDF). Archived from the original (PDF) on 2010-03-31. Retrieved 2009-03-01.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)

외부 링크