Differences between revisions 27 and 28
Revision 27 as of 2018-10-10 11:08:04
Size: 5332
Editor: 정수
Comment:
Revision 28 as of 2018-10-10 11:10:51
Size: 5597
Editor: 정수
Comment:
Deletions are marked like this. Additions are marked like this.
Line 105: Line 105:
 (values args):: args를 하나의 값으로 합쳐서 반환. 별다른 조치를 하지 않으면 가장 앞의 값을 기본값으로 사용.
 (multiple-value-bind (var1 var2 ...) val stmt):: multiple value인 val을 var1, var2로 분해하고 stmt를 실행.

CommonLisp 학습을 위한 책

프로젝트 셋팅 스크린캐스트

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를 반환.
(remove-duplicates lst)
중복 원소를 제거하여 반환.
(mapcan func lst)
mapcar와 같지만, 각 결과값을 flatten하여 append한 결과를 반환.
(pushnew elem lst)
lst의 맨 앞에 elem을 추가. inplace 함수.
(make-array num)
num 크기의 배열을 생성.
(aref arr pos)
배열 arr에서 pos 위치의 원소를 반환.
(make-hash-table)
해시 테이블을 생성하여 반환.
(gethash key hsh)
hsh 해시 테이블에서 key에 해당하는 값을 반환.
(values args)
args를 하나의 값으로 합쳐서 반환. 별다른 조치를 하지 않으면 가장 앞의 값을 기본값으로 사용.
(multiple-value-bind (var1 var2 ...) val stmt)
multiple value인 val을 var1, var2로 분해하고 stmt를 실행.

CommonLisp (last edited 2022-09-02 01:05:43 by 정수)