common lisp
-
테스트 주도 방식으로 리스프 매크로 작성하기Programmer/Programming 2014. 6. 5. 11:34
Lisp에서 매크로를 작성하는 방법을 "Peter Seibel"의 "Practical Common Lisp"에 따르면 다름과 같은 순서로 진행한다. (비록 쓸모는 없지만 쉽게 이해할 수 있는 두 숫자를 더하는 매크로를 작성하겠다.) 우선 호출할 예제 폼을 작성한다. (add 3 5) 위 예제 폼으로 확장될 코드를 작성한다. (+ 3 5) 매크로를 구현하다. (defmacro add (x y) `(+ ,x ,y)) 테스트 주도 방식을 적용하면 대략 다음과 같다. 2013/05/07 - [Programming/Project Management] - 테스트 주도 개발 - 둘째날 우선 호출할 예제 폼을 작성한다. 위 예제 폼으로 확장될 코드를 작성한다. 테스트 케이스를 작성한다. (테스트 프레임워크는 생략한다...
-
MAPCAR와 그 친구들(MAPC, MAPCAN)Programmer/Programming 2014. 5. 30. 16:05
MAPCAR는 리스트의 값에 동일한 작업을 처리하는데 유용하다. MAPCAR의 인자는 적용할 함수와 한 개 이상의 리스트를 인자로 가진다. 인자 함수는 리스트의 개수만큼 인자를 받을 수 있어야 한다. MAPCAR는 인자 함수의 결과를 리스트로 묶어서 반환한다. 리스트의 모든 값에 10을 더해보다. (인자 함수가 한개의 인자를 가지는 것을 주목한다.) (mapcar #'(lambda (x) (+ x 10)) (list 1 2 3)) ; => (11 12 13) 두개의 리스트의 값을 더해보다. (인자 함수가 두개의 인자를 가지는 것을 주목한다.) (mapcar #'(lambda (x y) (+ x y)) (list 1 2 3) (list 4 5 6)) ; => (5 7 9) MAPC, MAPCAN는 반환값(..
-
간단한 데이타베이스를 TDD 로 개발하기 소스 코드Programmer/Programming 2014. 3. 19. 10:04
아래는 간단한 데이타베이스를 TDD로 개발하기의 최종 결과물이다. cd-db.lisp (defpackage :cd-db (:use :common-lisp) (:export #:dump-db #:drop-db #:make-record #:add-record #:save-db #:load-db #:where #:select #:update #:make-comparison-expr #:make-comparisons-list #:delete-records)) (in-package :cd-db) (defvar *db* nil) (defun dump-db () *db*) (defun drop-db () (setf *db* nil)) (defun make-record (title artist rating ripped..
-
간단한 데이타베이스를 TDD 로 개발하기 3회: add-recordProgrammer/Programming 2014. 3. 19. 10:02
이번 강의에서는 CD 레코드를 DB에 추가하는 함수 add-record를 개발한다. 이 함수는 인자로 CD 레코드를 받는다. 비어있는 DB에 add-record로 레코드를 추가하면, (add-record (make-cd "Home" "Dixie Chicks" 9 t)) dump-db는 다음과 같은 결과를 출력한다. '((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)) 1차 테스트의 구현과 통과는 쉽고 간단함으로 빠르게 진행하자. (define-test add-record-test (add-record (make-cd "Home" "Dixie Chicks" 9 t)) (assert-equal '((:title "Home" :artist "Dixie ..
-
간단한 데이타베이스를 TDD 로 개발하기 2회: make-cdProgrammer/Programming 2014. 3. 19. 09:57
이번에는 CD의 레코드를 만드는 함수를 만들어보자. 함수의 이름은 make-cd이며 인자로 제목, 아티스트, 순위, 리핑 여부를 전달한다. (make-cd "Home" "Dixie Chicks" 9 t) 반환값은 이전 강의에서 언급한 속성 리스트를 출력한다. (:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) 우리가 예상하는 동작을 토대로 테스트를 작성하자. (define-test make-cd-test (assert-equal '(:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) (make-cd "Home" "Dixie Chicks" 9 t))) 우선 가장 단순한 방법으로 위 테스트를 통과시키자...
-
간단한 데이타베이스를 TDD 로 개발하기 1회: dump-dbProgrammer/Programming 2014. 3. 19. 09:47
앞으로 몇번에 걸쳐서 연재할 내용은 Peter Seibel가 쓴 “Practical Common Lisp” 중에 3장 “A Simple Database”를 테스트 주도 개발(Test-Driven Development: TDD)로 재구성한 것이다. 책과 비교해서 프로그램의 작성 순서만 달리할 뿐 소스는 책의 것과 같다. 이번 연재에는 테스트 프레임워크로 lisp-unit을 이용한다 CD 데이타베이스인 cd-db 패키지와 테스트가 있는 cd-tests 패키지로 분리하여 개발을 시작한다. (defpackage :cd-db (:use :common-lisp) (:export #:dump-db)) (in-package :cd-db) (defpackage :cd-tests (:use :common-lisp :lis..