Gsong's Blog


SICP 2008/10 정기모임


SICP 정기모임을 갔다 왔습니다. 참석자는 지아님, 컴키드님, 디군님, 솔리드원님, 꼬니님 그리고 저까지해서 총 6명. 체크인하면서 지난 시간 동안 어떤 일들이 있었는지 이런 저런 얘기들을 하고, 곧 이어 컴키드님이 유닛테스팅에 대한 발표를 해주셔서 그에 대한 토론이 오갔습니다. 그렇잖아도 유닛테스팅을 좀 배워서 써먹어 볼까 하는 때에 아주 큰 도움이 되는 세션이었습니다.

발표가 끝난 후 자연스레 유닛테스팅과 TDD 에 대한 토론으로 이뤄졌는데, 저는 둘 다 시도해보지 않았던 터라 질문만 했습니다. 회사 내부에서 쓰는 유닛 테스팅 프레임웍이 있을 것 같은데 한번 찾아봐야 될 것 같더군요.

그렇게 해서 어쩌다 보니 2시간이 후딱 지나가버렸네요. 시작하기 전에 한 15 분 정도를 그냥 보내고 해서 그런가 싶기도 했구요. 던킨도넛으로 자리를 옮겨서 얘기하는 시간을 가졌지만, 흐름이 끊겨서 토론의 주제가 이어지지는 않았습니다. 그래서 다음번엔 주제 토론을 압축적으로 할 수 있는 방법들 찾아서 얘기해보면 좋겠다 싶기도 했습니다.

아래는 오늘 세션중에 언급됐던 책들입니다.


실용주의 프로그래머를 위한 단위 테스트 with JUnit
데이비드 토머스 외 지음, 이용원 외 옮김/인사이트


테스트 주도 개발
켄트 벡 지음, 김창준 외 옮김/인사이트


레거시 코드 활용 전략
마이클 C. 페더스 지음, 이우영.고재한 옮김/에이콘출판

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/28 11:38 2008/10/28 11:38
top

 

SICP 연습문제 풀이 2.57


(define (deriv exp var) (cond ((number? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp) (make-sum (make-product (multiplier exp) (deriv (multiplicand exp) var)) (make-product (deriv (multiplier exp) var) (multiplicand exp)))) ((exponentiation? exp) (make-product (exponent exp) (make-product (deriv (base exp) var) (make-exponentiation (base exp) (- (exponent exp) 1))))) (else ((error "unknown expression type -- DERIV" exp))))) (define (variable? x) (symbol? x)) (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) (define (make-sum a1 a2) (cond ((=number? a1 0) a2) ((=number? a2 0) a1) ((and (number? a1) (number? a2)) (+ a1 a2)) (else (list '+ a1 a2)))) (define (make-product m1 m2) (cond ((or (=number? m1 0) (=number? m2 0)) 0) ((=number? m1 1) m2) ((=number? m2 1) m1) ((and (number? m1) (number? m2)) (* m1 m2)) (else (list '* m1 m2)))) (define (sum? x) (and (pair? x) (eq? (car x) '+))) (define (addend s) (cadr s)) (define (product? x) (and (pair? x) (eq? (car x) '*))) (define (multiplier p) (cadr p)) (define (=number? exp num) (and (number? exp) (= exp num))) (define (exponentiation? x) (and (pair? x) (eq? (car x) '**))) (define (base x) (cadr x)) (define (exponent x) (caddr x)) (define (make-exponentiation base exponent) (cond ((=number? exponent 0) 1) ((=number? exponent 1) base) ((and (number? exponent) (number? base)) (fast-exp base exponent)) (else (list '** base exponent)))) (define (fast-expt b n) (cond ((= n 0) 1) ((even? n) (square (fast-expt b (/ n 2)))) (else (* b (fast-expt b (- n 1)))))) (define (square x) (* x x)) ;Solution 2.57 (define (augend s) (if (null? (cdddr s)) (caddr s) (cons '+ (cddr s)))) (define (multiplicand p) (if (null? (cdddr p)) (caddr p) (cons '* (cddr p))))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/12 18:03 2008/10/12 18:03
top

 

SICP 연습문제 풀이 2.56


(define (deriv exp var) (cond ((number? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp) (make-sum (make-product (multiplier exp) (deriv (multiplicand exp) var)) (make-product (deriv (multiplier exp) var) (multiplicand exp)))) ((exponentiation? exp) (make-product (exponent exp) (make-product (deriv (base exp) var) (make-exponentiation (base exp) (- (exponent exp) 1))))) (else (error "unknown expression type -- DERIV" exp)))) (define (variable? x) (symbol? x)) (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) (define (make-sum a1 a2) (list '+ a1 a2)) (define (make-product m1 m2) (list '* m1 m2)) (define (sum? x) (and (pair? x) (eq? (car x) '+))) (define (addend s) (cadr s)) (define (augend s) (caddr s)) (define (product? x) (and (pair? x) (eq? (car x) '*))) (define (multiplier p) (cadr p)) (define (multiplicand p) (caddr p)) (define (=number? exp num) (and (number? exp) (= exp num))) ;Solution (define (exponentiation? x) (and (pair? x) (eq? (car x) '**))) (define (base x) (cadr x)) (define (exponent x) (caddr x)) (define (make-exponentiation base exponent) (cond ((=number? exponent 0) 1) ((=number? exponent 1) base) ((and (number? exponent) (number? base)) (fast-exp base exponent)) (else (list '** base exponent)))) (define (fast-expt b n) (cond ((= n 0) 1) ((even? n) (square (fast-expt b (/ n 2)))) (else (* b (fast-expt b (- n 1)))))) (define (square x) (* x x))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/12 18:02 2008/10/12 18:02
top

 

SICP 연습문제풀이 2.42


;2.42 (define (queens board-size) (define (queen-cols k) (if (= k 0) (list empty-board) (filter (lambda (positions) (safe? k positions)) (flatmap (lambda (rest-of-queens) (map (lambda (new-row) (adjoin-position new-row k rest-of-queens)) (enumerate-interval 1 board-size))) (queen-cols (- k 1)))))) (queen-cols board-size)) (define (flatmap proc seq) (accumulate append nil (map proc seq))) (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define nil (list)) (define (filter predicate sequence) (cond ((null? sequence) nil) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) ;Solution (define empty-board (list)) (define (adjoin-position new-row k rest-of-queens) (append rest-of-queens (list new-row))) (define (safe? k position) (define (iter col i) (cond ((= i k) #t) ((and (SafeCol? position (- k i) col) (SafeCol? position (- k i) (+ col i)) (SafeCol? position (- k i) (- col i))) (iter col (+ i 1))) (else #f))) (iter (colValue k position) 1)) (define (colValue k position) (if (= k 1) (car position) (colValue (- k 1) (cdr position)))) (define (SafeCol? position checkcol col) (not (= col (colValue checkcol position))))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/04 13:58 2008/10/04 13:58
top

 

SICP 연습문제풀이 2.39


(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define fold-right accumulate) (define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence)) (define nil (list)) (define (reverse_ sequence) (fold-right solution nil sequence)) (define (reverse_2 sequence) (fold-left solution2 nil sequence)) (define solution (lambda (x y) (append y (list x)))) (define solution2 (lambda (x y) (cons y x))) 'test result > (reverse (list 1 2 3 4 5)) (5 4 3 2 1) > (reverse_ (list 1 2 3 4 5)) (5 4 3 2 1) > (reverse_2 (list 1 2 3 4 5)) (5 4 3 2 1) >
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/30 22:09 2008/09/30 22:09
top

 

SICP 연습문제 풀이 2.6


(define zero (lambda (f) (lambda (x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x))))) (define one (lambda (f) (lambda (x) (f x)))) (define (plus a b) (lambda (f) (lambda (x) ((b f) ((a f) x))))) (define (test n int) (equal? int ((n (lambda (x) (+ x 1))) 0))) ' test result > (test zero 0) #t > (test one 1) #t > (test (add-1 zero) 1) #t > (test (plus zero zero) 0) #t > (test (plus zero one) 1) #t > (test (plus one one) 2) #t > (test (plus one (plus one one)) 3) #t >
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/30 21:42 2008/09/30 21:42
top