대부분의 기능적 언어는 단일 연결 목록 ( "cons"목록)을 가장 기본적인 목록 유형으로 사용합니다. 예로는 Common Lisp, Haskell 및 F #이 있습니다. 이것은 기본 목록 유형이 배열 인 주류 언어와 다릅니다.
왜 그런가요?
Common Lisp (동적 타입)의 경우, 단점은 목록, 트리 등의 기반이 될만큼 일반적이라는 아이디어를 얻습니다. 이것은 작은 이유 일 수 있습니다.
정적 타입 언어의 경우, 좋은 추론을 찾을 수 없으며 반대 주장을 찾을 수도 있습니다.
- 기능적 스타일은 불변성을 장려하므로 연결된 목록의 삽입 용이성은 이점이 아닙니다.
- 기능적 스타일은 불변성을 권장하므로 데이터 공유도 가능합니다. 배열은 연결된 목록보다 "부분적으로"공유하기가 쉽습니다.
- 일반 배열에서도 패턴 일치를 수행 할 수 있으며 더 좋습니다 (예를 들어 오른쪽에서 왼쪽으로 쉽게 접을 수 있음).
- 게다가 무료로 랜덤 액세스 할 수 있습니다.
- 언어가 정적으로 유형이 정해지면 (실용적인 이점) 정기적 인 메모리 레이아웃을 사용하고 캐시에서 속도를 높일 수 있습니다.
그렇다면 왜 링크 된 목록을 선호합니까?
an array is easier to share "partially" than a linked list
당신이 의미하는 바를 명확히해야 한다고 생각 합니다. 재귀 적 특성으로 인해 그 반대의 경우도 마찬가지입니다. 어느 노드를 통과하여 연결된 목록을 더 쉽게 공유 할 수 있지만 배열은 새 복사본을 만드는 데 시간을 소비해야합니다. 또는 데이터 공유 측면에서 두 개의 연결된 목록이 동일한 접미사를 가리킬 수 있습니다. 이는 배열에서는 불가능합니다.