1. 리스트
- 리습(Lisp)은 List Processor의 약자이다.
- 리스트의 표현은 괄호안에 나타낸다. ex) (red green blue)
- 리스트는 Cons cells(콘 셀)의 연결로 이루어져 있다.
- 이러한 콘셀은 2개의 포인터로 연결되어 있는데 하나는 데이터, 하나는 다음 요소를 가르킨다
* 연결리스트와 유사하다
1) 리스트의 길이
- 리스트의 길이는 요소의 개수와 같다.
ex) (a b c d) : 4개 (a (b c) d) : 3개(Nested list라 불린다- 리스트안 리스트)
- NIL : 빈 리스트
2) 리스트의 동등성
ex) (A (B C) D) 와 (A B (C D)) 는 같은 리스트일까?
답 : x (괄호 안 요소가 같아야 함)
3) FIRST, SECOND, THIRD, REST 함수
- 영어 그래도 해석하면 되는 함수다.
ⓐ FRIST : 리스트 안 첫번째 원소를 반환한다
ⓑ SECOND : 리스트 안 두번째 원소를 반환한다
ⓒ THRID : 리스트 안 세번째 원소를 반환한다
ⓓ REST : FIRST를 제외한 원소들을 반환한다
4) CAR, CDR 함수
ⓐ CAR : 첫번째 콘즈셀이 가르키는 값을 반환한다(FIRST와 같음)
ex) (car '(the big bopper)) = THE
ⓑ CDR : 첫번째 원소를 제외한 나머지 원소들을 반환한다(REST와 같음)
ex) (cdr '(the big bopper)) = BIG BOPPER
* 원소가 한개면 NIL을 반환한다.
5) CAR, CDR의 결합
- 위 함수들은 결합하여 쓸 수있다.
ex) CDR 후 CAR = CADR (맨 오른쪽부터 읽어나가면서 적용시킴)
(CADR '(FEE FIE FOE FUM)) = FIE
ex) CAR 후 CDR = CDAR
6) CONS
- 콘즈함수는 콘즈셀을 만드는 함수이다.
- 콘셀들을 합쳐 새로운 하나의 콘즈셀을 만든다.
ex) (cons 'rice '(and beans)) = (rice and beans)
6) LIST
- 리스트는 새로운 리스트를 만든다
ex) (list 'rice 'and 'beans) -> (rice and beans)
* 리스트와 콘즈의 차이? : 리스트는 콘즈셀들의 결합으로 마지막이 nill로 끝난다.
CONS는 하나의 콘셀을 만들고 LIST는 콘셀의 결합을 만든다.
ex) (cons 'zort 'nil) = (zort) /(list 'zort 'nil) = (zort nil)
- append : 리스트를 추가한다
,ex) (append '(rice) '(and beans)) = (rice and beans)
7) LIST PREDICATES
ⓐ LISTP : 리스트인지 확인한다. 리스트면 T, 아니면 NIL을 반환
ⓑ CONSP : 콘즈셀인지 확인한다
ex) (consp nil) vs (listp nil) 차이는? *nil 은 리스트다!
ⓒ atom : consp의 반대를 출력
;; rest, last는 리스트의 형태로 반환 first~third는 원소로 반환
'Major > Lisp' 카테고리의 다른 글
[Lisp] Ch 11 - 반복문과 블록구조 (Iteration and Block Structure) (0) | 2021.04.15 |
---|---|
[Lisp] Ch 5 - Variables and Side Effects (0) | 2021.04.13 |
[Lisp] Ch 3 - Eval Notation (0) | 2021.04.13 |
[Lisp] Ch 4 - 조건문 (Conditionals) (0) | 2021.04.10 |
[LISP] Ch 1 - 함수와 데이터(Functions and Data) (0) | 2021.03.19 |