List Functions
리스트를 다루는 것은 리스프 프로그래밍에서 *아주* 중요한 부분이다. 리스프에서 콘셀을 다루는데는 cons, car, cdr 이라는 3가지 기본 함수가 있다.
The cons Function
타입과는 무관하게 2개의 데이터를 연결할 경우, 주로 쓰는 방법이 cons 함수를 통한 것이다. 예를 들어, chicken 을 cat 에 연결해보자.
1 2 | [26]> (cons 'chicken 'cat) (CHICKEN . CAT) | cs |
보는 바와 같이 cons 은 괄호안의 점으로 각각의 아이템을 연결한 하나의 객체를 반환한다. 이것은 일반적인 리스트와는 다르다. 가운데 있는 점을 통해 2개의 아이템을 연결하는 콘셀을 만드는 것이다. 그리고 quoting 을 통해 2개의 아이템을 리스프가 코드가 아닌 데이터로 인식하게 했다.
다른 아이템 대신에 다음과 같이 nil 에 연결할 수도 있다.
1 2 | [28]> (cons 'chicken 'nil) (CHICKEN) | cs |
cat 과는 달리 nil 은 아웃풋에 드러나지 않는다. 여기에는 간단한 이유가 있다. nil 은 리스프에서 리스트를 끝내기 위한 특수한 심볼이기 때문이다. 다음과 같이 나타낼 수도 있다.
1 2 | [29]> (cons 'chicken ()) (CHICKEN) | cs |
비어 있는 리스트인 () 는 nil 대신에 사용이 가능하다. cons 함수는 새로운 아이템을 리스트 앞에 추가할 수도 있다.
1 2 | [30]> (cons 'pork '(beef chicken)) (PORK BEEF CHICKEN) | cs |
모든 리스트는 콘셀로 만들어져 있기 때문에, (beef chicken) 리스트는 다음과 같은 두 개의 콘셀을 통해 만들어진 것이다.
1 2 | [31]> (cons 'beef (cons 'chicken ())) (BEEF CHICKEN) | cs |
실제로는 다음과 같이 구성되어 있는 것이다.
1 2 | [32]> (cons 'pork (cons 'beef (cons 'chicken ()))) (PORK BEEF CHICKEN) | cs |
기본적으로 리스프에서는 콘셀의 연결이나 리스트나 동일한 것이다.
'프로그래밍 Programming' 카테고리의 다른 글
Getting Started with CLISP (11) - 중첩리스트 Nested Lists (0) | 2017.09.16 |
---|---|
Getting Started with CLISP (10) - Car, Cdr, List Function (0) | 2017.09.16 |
Getting Started with CLISP (8) - 콘셀(Cons Cells) (0) | 2017.09.16 |
Getting Started with CLISP (7) - 리스프는 코드와 데이터를 어떻게 구분하는가 How Lisp Distinguishes Between Code and Data (0) | 2017.09.15 |
Getting Started with CLISP (6) - Symbols, Numbers, Strings (0) | 2017.09.15 |