리스프
-
리스프 개발 팁: 명령창 결과 저장하기Programmer/Programming 2014. 6. 27. 10:38
리스프에서 개발하기 가장 좋은 도구는 REPL 명령창이다. 따라서 저장할 내용을 표준 출력으로 보내면 개발이 수월할 것이다. 예를 들어, 당신은 `MY-SAVE' 함수를 개발하고 있다. 이 함수는 인자 `FNAME'으로 받은 파일명에 당신의 데이타를 저장한다. 개발 과정에서 수시로 파일을 열어서 내용을 확인해야 한다. 불편하다. REPL 명령창에 저장할 내용을 바로 확인하면 개발이 훨씬 편하겠다. 데이타를 저장할 형태로 가공하여 REPL 표준 출력하는 함수 `MY-WRITE'를 작성하자. 이 함수의 구현과 검증은 REPL을 벗어날 필요가 없다. 이제 함수 `MY-SAVE'는 단지 표준 출력을 저장할 파일에 연결한 후에 `MY-WRITE'를 호출하면 된다. (defun my-save (fname) (wit..
-
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..