Programming/lisp2013. 1. 14. 23:04
lisp는 이름 그대로 LISt Processing으로
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


그나저나.. 책에 의하면 아래와 같이 뜬다고 하는데
> (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의 con cell 과 NIL  (0) 2013.01.14
lisp #  (0) 2013.01.11
만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
lisp 전역변수 / 지역변수  (0) 2013.01.09
Posted by 구차니

댓글을 달아 주세요