'Programming/lisp'에 해당되는 글 35건

  1. 2012.01.25 lisp 관련 책
  2. 2012.01.24 lisp 문법
  3. 2012.01.24 slime / lispbox
  4. 2012.01.15 우분투에서 lisp 설치하기
  5. 2011.05.05 lisp
Programming/lisp2012. 1. 25. 19:05
예전 학교수업시간에 쓰던 책인데 4th ed였던데 벌써 9th ed 라니...
간략하게 프로그래밍 언어중 함수적 언어에서 나오는데
막상 따라하려니 버전이 달라서 list? 이런 명령어는 먹지 않는다 -_-


내용 정리
모든 identifier는 atom이며 ' (quote) 를 통해서 list에 넣거나 함수의 식별자로서 사용이 가능해진다.
APPEND 명령은 CONS(constructor) 명령을 통해 재귀적으로 앞의 리스트에 붙이는 개념이다.




문득 lisp를 인공지능에서 사용하는 이유중에 하나가
car 명령을 통해 주어를 빼내고 cdr 명령을 통해 주어를 제외한 문장을 빼내는 식으로
동사 / 목적어 이렇게 분리를 하면서 구문 분석을 손쉽게 할 수 있기 때문이 아닐까? 라는 생각이 들었다.

[링크 : http://www.pearsonhighered.com/.../Concepts-of-Programming-Languages/9780201385960.page]

'Programming > lisp' 카테고리의 다른 글

클로져  (0) 2012.12.03
lisp는 리스트지 prefix 표기법이 아니다  (0) 2012.11.19
lisp 문법  (0) 2012.01.24
slime / lispbox  (0) 2012.01.24
우분투에서 lisp 설치하기  (0) 2012.01.15
Posted by 구차니
Programming/lisp2012. 1. 24. 18:07
연휴이고 하니 뜬금없이 LISP 공부중인데 전에도 이해 못했고 이번에도 이해 못하고 있는 lisp -_-
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만 입력해도 입력했던 값이 나오게 된다.
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
100 

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 라는 것을 만드는 예제이다.
> (defun three () 3)            
THREE                           

> (three)                       
3                               

> (+ (three) 1)                 
4          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 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)
7 
 
리스트는 아래와 같이 '을 먼저 찍고 해주면 된다. (아직 이해 부족.. OTL)
물론 리스트도 setq로 선언하여 사용이 가능하다.
> '(1 2 3)             
(1 2 3)                

> (1 2 3)              
error: bad function - 1 

'/어포스트로피/apostrophe
'foo는 (quote foo) 와 동일하고 s expression 에서 함수가 아닌 것으로 해석하도록 하는 명령어이다.
어떻게 보면 변수로 인식시킨다고 해야 하려나? 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 'foo is simply a faster way to type the special form

(quote foo)

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
Posted by 구차니
Programming/lisp2012. 1. 24. 10:04
slime 은 emacs와 lisp를 합쳐서 만든 통합 개발 환경이다.
Superior Lisp Interaction Mode for Emacs 라..
vi도 안친한데 emacs를 이용해서 어떻게 해야하나 하아..


[링크 :  http://common-lisp.net/project/slime/]


아무튼 간단하게 압축만 풀면 실행이 되는 slime for windows 프로그램이 있어서 투척
멋지게도 컬러풀하게 나오고 아래에서는 defun 이런거 입력하면 기본 유형이 나와준다.


[링크 :  http://common-lisp.net/project/lispbox/]   lispbox(slime for windows) 
[링크 :  http://www.cs.utexas.edu/~novak/gclwin.html] gnu lisp for windows


-----
우분투야 항상 그러하듯 slime 패키지를 설치하면 해결



일단 emacs를 실행하고 Alt-x 누른후 slime 이라고 입력한다.


그러면 clisp를 통해서 어쩌구 저쩌구 하고는 아래와 같이 프롬프트가 뜬다.


[링크 : http://akoumjian.blogspot.com/2007/10/clisp-in-emacs-using-slime-on-ubuntu.html]

'Programming > lisp' 카테고리의 다른 글

lisp는 리스트지 prefix 표기법이 아니다  (0) 2012.11.19
lisp 관련 책  (0) 2012.01.25
lisp 문법  (0) 2012.01.24
우분투에서 lisp 설치하기  (0) 2012.01.15
lisp  (0) 2011.05.05
Posted by 구차니
Programming/lisp2012. 1. 15. 18:34
clisp 패키지로 제공한다.

$ sudo apt-get install clisp 

$ clisp
  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.44.1 (2008-02-23) <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-2008

Type :h and hit Enter for context help.

[1]>  

---
2012.12.05 추가
clisp 종료시에는 (quit) 라고하면 된다. 

'Programming > lisp' 카테고리의 다른 글

lisp는 리스트지 prefix 표기법이 아니다  (0) 2012.11.19
lisp 관련 책  (0) 2012.01.25
lisp 문법  (0) 2012.01.24
slime / lispbox  (0) 2012.01.24
lisp  (0) 2011.05.05
Posted by 구차니
Programming/lisp2011. 5. 5. 21:57
lisp는 LISt Processing 의 약자로 프로그래밍 언어이다.
일반적으로 AI 쪽에서 많이 쓰이며
괄호가 넘쳐나는 괴랄한 언어라서 이해가 쉽지는 않다 -_-


수업을 들었었어도 이해를 할수가 없는 언어 OTL 
다시 한번 시도를 해봐야지 ㅠ.ㅠ

[링크 : http://www.cs.cmu.edu/~dst/LispBook/index.html] Common Lisp (PDF)
[링크 : http://www.paulgraham.com/onlisp.html]
    [링크 : http://www.paulgraham.com/onlisptext.html] On LISP (PDF)
[링크 : http://gigamonkeys.com/book/] Practical COMMON LISP (HTML)

[링크 : http://lisp-korea.wikispaces.com/]
[링크 : http://onlisp.blogspot.com/2008/03/common-lisp.html

'Programming > lisp' 카테고리의 다른 글

lisp는 리스트지 prefix 표기법이 아니다  (0) 2012.11.19
lisp 관련 책  (0) 2012.01.25
lisp 문법  (0) 2012.01.24
slime / lispbox  (0) 2012.01.24
우분투에서 lisp 설치하기  (0) 2012.01.15
Posted by 구차니