lisp는 이름 그대로 LISt Processing으로
LIST를 기반으로 작업하게 된다.
자료구조에서 배우던 linked list를 이용해서 자료를 저장하게 되는데
C언어에서 항상 문자열은 0x00 혹은 \0으로 끝맺듯
list 도 마지막은 NIL로 표기를 하게 된다.
아래는 NIL로 끝나지 않는 리스트와 NIL로 끝나는 리스트를 만든것으로
. 은 NIL로 끝나지 않는 리스트를 의미하게 된다.
last는 안되고 아무튼 rest는 남은걸 나타내는 것이기 때문에 가능한 것 같은데
(1 2)에 대한 rest 두번은 NIL이 나오고
(1 . 2) 에 대한 rest 두번은 존재하지 않기 때문에 에러가 발생하게 된다.
            
                    
                    
LIST를 기반으로 작업하게 된다.
자료구조에서 배우던 linked list를 이용해서 자료를 저장하게 되는데
C언어에서 항상 문자열은 0x00 혹은 \0으로 끝맺듯
list 도 마지막은 NIL로 표기를 하게 된다.
아래는 NIL로 끝나지 않는 리스트와 NIL로 끝나는 리스트를 만든것으로
. 은 NIL로 끝나지 않는 리스트를 의미하게 된다.
| [1]> '(1 . 2) 
(1 . 2) 
[2]> (cons 1 2) 
(1 . 2) 
[3]> '(1 2) 
(1 2) [4]> (cons 1 (cons 2 NIL)) 
(1 2) 
 | 
last는 안되고 아무튼 rest는 남은걸 나타내는 것이기 때문에 가능한 것 같은데
(1 2)에 대한 rest 두번은 NIL이 나오고
(1 . 2) 에 대한 rest 두번은 존재하지 않기 때문에 에러가 발생하게 된다.
| [6]> (rest (rest '(1 2))) NIL 
[6]> (rest (rest '(1 . 2))) 
*** - REST: 2 is not a list 
The following restarts are available: 
ABORT          :R1      Abort debug loop 
ABORT          :R2      Abort main loop 
[7]> (rest '(1 . 2)) 
2 
 | 
그나저나.. 책에 의하면 아래와 같이 뜬다고 하는데
내가 사용하는 clisp 2.49에서는 뻗어버린다 -_-
| > (defparameter foo '(1 2 3)) 
FOO 
> (setf (cdddr foo) foo) 
#1=(1 2 3 . #1#)  | 
내가 사용하는 clisp 2.49에서는 뻗어버린다 -_-
|   i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo 
  I I I I I I I      8     8   8           8     8     o  8    8 
  I  \ `+' /  I      8         8           8     8        8    8 
   \  `-+-'  /       8         8           8      ooooo   8oooo 
    `-__|__-'        8         8           8           8  8 
        |            8     o   8           8     o     8  8 
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8 
Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/> 
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 
Copyright (c) Bruno Haible, Sam Steingold 1999-2000 
Copyright (c) Sam Steingold, Bruno Haible 2001-2010 
Type :h and hit Enter for context help. 
[12]> (defparameter foo '(1 2 3)) 
FOO 
[13]> (setf (cdddr foo) foo) 
^C 
*** - Ctrl-C: User break 
The following restarts are available: 
*** - handle_fault error2 ! address = 0x68457000 not in [0x65de5658,0x68457000) ! 
SIGSEGV cannot be cured. Fault address = 0x68457000. 
GC count: 47 
Space collected by GC: 0 355764032 
Run time: 40 918556 
Real time: 164 950564 
GC time: 23 933489 
Permanently allocated: 94080 bytes. 
Currently in use: 1194294496 bytes. 
Free space: 12 bytes.  
 | 
'Programming > lisp' 카테고리의 다른 글
| xlisp (0) | 2013.01.16 | 
|---|---|
| lisp 연관리스트 (0) | 2013.01.14 | 
| lisp # (0) | 2013.01.11 | 
| 만들면서 배우는 리스프 프로그래밍 (2) | 2013.01.09 | 
| lisp 전역변수 / 지역변수 (0) | 2013.01.09 | 
