연휴이고 하니 뜬금없이 LISP 공부중인데 전에도 이해 못했고 이번에도 이해 못하고 있는 lisp -_-
LISP는 LISt Process 의 약자로
이름대로 모든것으로 LIST 에 기반하여 표현하게 되며, 리스트는 () 로 둘러쌓여 표현된다.
이러한 이유로 lisp 소스를 보면 ()가 가득히 둘러쌓여 가독성이 떨어지는 형태가 된다.
또한 리스트에서 계산등은 모두 전위표기법을 사용하게 되며 기본 연산은 다음과 같이 표현된다.
리스프에 내장된 함수라고 해야하나 keyword 라고 해야하나 아무튼 그거 목록
[링크 : http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/] << 목록
[링크: http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/clm.html] << 최상위
LISP는 LISt Process 의 약자로
이름대로 모든것으로 LIST 에 기반하여 표현하게 되며, 리스트는 () 로 둘러쌓여 표현된다.
이러한 이유로 lisp 소스를 보면 ()가 가득히 둘러쌓여 가독성이 떨어지는 형태가 된다.
또한 리스트에서 계산등은 모두 전위표기법을 사용하게 되며 기본 연산은 다음과 같이 표현된다.
CL-USER> (+ 1 2 ) ; 1 + 2
3
CL-USER> (- 1 2 ) ; 1 - 2
-1
CL-USER> (/ 1 2) ; 1 / 2
1/2
CL-USER> (* 1 2) ; 1 * 2
2
CL-USER> (mod 3 2) ; 3 % 2
1
CL-USER> (log 2) ; log(2)
0.6931472
CL-USER> (sqrt 2) ; sqrt(2)
1.4142135
CL-USER> (< 1 2) ; 1 < 2
T |
그리고 기호를 가지는 변수(?)는 setq 명령어를 이용하여 선언한다.
val을 입력하면 해석할 수 없는 변수이기 때문에 에러가 나지만 setq를 통해서 값을 정해주면
val만 입력해도 입력했던 값이 나오게 된다.
val을 입력하면 해석할 수 없는 변수이기 때문에 에러가 나지만 setq를 통해서 값을 정해주면
val만 입력해도 입력했던 값이 나오게 된다.
CL-USER> val
Invoking restart: Return to sldb level 2.
; Evaluation aborted on #<UNBOUND-VARIABLE #xC7B642E>.
CL-USER> (setq val 100)
100
CL-USER> val
CL-USER> (setq str "This is test string")
"This is test string"
CL-USER> str
"This is test string" |
아무튼 defvar 라는 키워드를 이용해서 변수를 선언 할수도 있는데 setq와는 다르게 리턴되는 값이 다르다
CL-USER> (defvar loop 10)
LOOP
CL-USER> loop
10 |
함수는 defun (DEFine + FUNction 인 듯?)을 통해서 선언이 가능하다.
단순하게 3을 리턴하는 함수로 three 라는 것을 만드는 예제이다.
리스트는 아래와 같이 '을 먼저 찍고 해주면 된다. (아직 이해 부족.. OTL)
물론 리스트도 setq로 선언하여 사용이 가능하다.
'/어포스트로피/apostrophe
단순하게 3을 리턴하는 함수로 three 라는 것을 만드는 예제이다.
> (defun three () 3)
THREE
> (three)
3
> (+ (three) 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> three()
error: unbound variable - THREE
> three
error: unbound variable - THREE
> (+ three 1)
error: unbound variable - THREE
|
인자를 사용하는 함수로 인자는 아래와 같이 사용한다.
CL-USER> (defun add (x y) (+ x y))
ADD
CL-USER> (add 3 4) |
리스트는 아래와 같이 '을 먼저 찍고 해주면 된다. (아직 이해 부족.. OTL)
물론 리스트도 setq로 선언하여 사용이 가능하다.
> '(1 2 3)
(1 2 3)
> (1 2 3)
|
'/어포스트로피/apostrophe
'foo는 (quote foo) 와 동일하고 s expression 에서 함수가 아닌 것으로 해석하도록 하는 명령어이다.
어떻게 보면 변수로 인식시킨다고 해야 하려나? replace 라고 된것을 보면 -_-
어떻게 보면 변수로 인식시킨다고 해야 하려나? replace 라고 된것을 보면 -_-
Creating sets (actually, creating variables) can be done with setf : this creates a set called learned with three members: (setf learned '(VB C++ LISP)) The apostrophe is uses to designate that something in brackets isn't a function (or an S-expression). Basically, if LISP receives something like (VB C++ LISP) it assumes VB is the name of a function and C++ and LISP are its arguments. The apostrophe says that this isn't a function, it's a list, and can itself be an argument in a function. [링크 : http://homepages.paradise.net.nz/milhous/lisp.htm] |
The form
which is to say, "do not evaluate the name foo and replace it with its value; I really mean the name foo". I think SISC is perfectly fine for exploring the exercises in TLS.[링크 : http://stackoverflow.com/questions/1539144/what-is-apostrophe-in-lisp-scheme] |
리스프에 내장된 함수라고 해야하나 keyword 라고 해야하나 아무튼 그거 목록
[링크 : http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/] << 목록
[링크: http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/clm.html] << 최상위
'Programming > lisp' 카테고리의 다른 글
lisp는 리스트지 prefix 표기법이 아니다 (0) | 2012.11.19 |
---|---|
lisp 관련 책 (0) | 2012.01.25 |
slime / lispbox (0) | 2012.01.24 |
우분투에서 lisp 설치하기 (0) | 2012.01.15 |
lisp (0) | 2011.05.05 |