Size: 4064
Comment:
|
Size: 4820
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 89: | Line 89: |
(with-open-file (stream-name filename :direction :output :if-exists :supersede) stmt):: 파일 스트림을 연다. thunk:: 인자가 0개인, 즉시 실행할 수 있는 상태의 함수 *standard-output*:: 표준 출력 스트림 (funcall func):: func를 실행 (ext:shell str):: 쉘에서 str을 실행 (maplist func lst):: lst에서 원소 하나씩 뒤로 가면서 func에 인자로 전달. (A B C) (B C) (C) (random num):: num 이하의 난수를 발생 (loop repeat num collect val):: num 횟수만큼 반복하면서 각 val을 원소로 하는 list를 반환. (loop for n from from-num to to-num collect val):: from-num부터 to-num까지 각 값을 n에 할당하며 반복하면서 각 val을 원소로 하는 list를 반환. |
CommonLisp 학습을 위한 책
책/OnLisp: 1993, PaulGraham, Prentice Hall
책/PracticalCommonLisp: 2005, PeterSeibel, Apress
책/LandOfLisp: 2010, ConradBarski, No Starch Press: 번역서 중고
책/CommonLispRecipes: 2016, Edmund Weitz, Apress
CL-USER> (ql:quickload :cl-project) CL-USER> (cl-project:make-project #p"~/myproject" :author "Jeongsoo Park" :email "toracle@gmail.com") CL-USER> (ql:quickload :myproject) CL-USER> (push #p"/home/toracle/myproject/" asdf:*central-registry*) CL-USER> (ql:quickload :myproject) CL-USER> (asdf:test-system :myproject)
QuickLisp 설치
QuickLisp는 CL에서 널리 사용되는 패키지 관리자이다. 일단 이걸 처음에 셋팅해놓아야 다른 패키지들 설치하기가 편리하다.
우선 아래 명령으로 quicklisp 부트스트래핑 스크립트를 다운로드 받는다.
$ curl -O https://beta.quicklisp.org/quicklisp.lisp
그리고 CL REPL을 실행하고, 해당 파일을 로드한다.
CL-USER> (load "~/quicklisp.lisp")
아래 명령으로 quicklisp을 설치한다.
CL-USER> (quicklisp-quickstart:install)
설치가 진행되고, ~/quicklisp 디렉토리가 생성된다.
아래 명령을 실행하여 quicklisp이 매 세션마다 자동적으로 로딩되도록 한다.
CL-USER> (ql:add-to-init-file)
자주 쓰는 명령어
Land of Lisp에서 나온 명령
- (ash number shift-digits)
- 숫자를 bit만큼 shift.
- (1- number)
- 숫자를 1 감소하여 반환.
- (1+ number)
- 숫자를 1 증가하여 반환.
- (flet ...)
- let과 비슷하나 변수 대신 함수를 정의하는 용도.
- (labels ...)
- flet과 비슷하나, 내부에서 정의된 함수끼리 서로 호출할 수 있음. let과 let*의 차이와 비슷함.
- (princ str)
- 화면에 출력. 사용자 친화적으로 출력.
- (oddp number)
- 홀수인지 여부를 반환.
- (cond ...)
- 조건 분기의 일반화된 form.
- (case ...)
- 조건 대신 값을 기준으로 분기하는 form.
- (eq a b)
- symbol의 경우 동등성 비교에 사용.
- (equal a b)
- symbol 이외의 모든 경우 동등성 비교에 사용.
- (assoc key alst)
- alist에서 key에 해당하는 entry를 추출.
- (mapcar func lst)
- list 각 원소에 대해 func를 적용하고 그 결과를 list로 이어붙여 반환.
- (apply func args)
- args와 함께 func를 호출.
- (append args)
- args들을 이어붙여 하나의 list로 반환.
- (remove-if-not func lst)
- list의 각 원소 중, func가 nil인 원소만 제외하고 반환.
- (find key lst :key func)
- list에서 key를 찾아 반환. 각 원소에서 key를 찾는 방법을 지정할 수 있음.
- (member elem lst)
- elem이 lst에 속하는지 여부를 반환.
- (push elem lst)
- lst의 맨 앞에 elem을 추가하여 반환.
- (progn stmts)
- 여러 stmt들을 수행함.
- (print str)
- 화면에 출력. 개행을 덧붙임.
- (prin1 str)
- 화면에 출력하되 개행을 생략.
- (read)
- 입력값을 받음.
- (eval stmt)
- 구문을 평가하여 실행.
- (loop stmt)
- 구문을 반복하여 실행.
- (unless cond stmt)
- 조건이 참이 아닐 동안 반복하여 실행
- (read-from-string str)
- 문자열로부터 입력값을 받음.
- (concatenate 'string args)
- args를 문자열로 간주하여 이어붙여 반환.
- (read-line)
- 한 행의 입력값을 받음.
- (if cond true-stmt false-stmt)
- if 구문
- (coerce str 'list)
- 문자열을 문자들의 list로 쪼개어 반환.
- (coerce lst 'string)
- 문자들의 list를 문자열로 붙여 반환.
- (substitute-if replace-val func lst)
- lst에서 func이 true일 때 해당 원소를 replace-val로 변경하여 반환.
- (complement func)
- ...
- (mapc func lst)
- lst의 각 원소에 대해 func를 실행. mapcar와는 달리 아무 값도 반환하지 않는다.
- (with-open-file (stream-name filename :direction :output :if-exists :supersede) stmt)
- 파일 스트림을 연다.
- thunk
- 인자가 0개인, 즉시 실행할 수 있는 상태의 함수
- *standard-output*
- 표준 출력 스트림
- (funcall func)
- func를 실행
- (ext:shell str)
- 쉘에서 str을 실행
- (maplist func lst)
- lst에서 원소 하나씩 뒤로 가면서 func에 인자로 전달. (A B C) (B C) (C)
- (random num)
- num 이하의 난수를 발생
- (loop repeat num collect val)
- num 횟수만큼 반복하면서 각 val을 원소로 하는 list를 반환.
- (loop for n from from-num to to-num collect val)
- from-num부터 to-num까지 각 값을 n에 할당하며 반복하면서 각 val을 원소로 하는 list를 반환.