Gsong's Blog

SICP 연습문제 풀이 2.58


a. Infix notation
 
b. multiple operand 를 infix 로 지원하는 건 만들기가 쉽지 않다. 차라리 infix notation 을 만들어 prefix 바꿔주는 converter 를 만드는 것이 훨씬 효율적이고 쉬운 일이 될 것이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2009/01/12 00:02 2009/01/12 00:02
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/478

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/448

  1. Tracked from 일일신우일신 2008/10/27 15:13 DELETE

    Subject: SICP 스터디 10월 정기모임 후기

    어김없이 10월에도 정기모임을 하고 돌아왔습니다. 지난 토요일 오후 강남에서 만났습니다. 그 동안은 오후 1시에 미리 만나서 같이 점심을 먹었었는데, 1시에 시간 맞춰 오시는 분들이 점점 줄?

  2. Tracked from 일상 혹은 이상 2008/10/27 22:32 DELETE

    Subject: SICP : 10월 정기 모임 후기

    SICP 10월 정기모임에 다녀왔다. 집에서 나올 때 하늘에 먹구름이 가득하길래 설마 비 따위가 오겠어 하며 버스에 올랐는데 서울에 도착할 무렵이 되니 비가 꽤 많이 오기 시작했다. 매 모임에

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/443

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/444

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/435

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/434

 

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

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/433

 

SICP 2008/7 정기모임


SICP 월간 정기 모임에 다녀왔습니다. 체크인을 마치고 주제별 토론(?) 순서로 진행되었는데요. d군님의 Statement vs Expression 이야기 아주 유익하니 좋았고, 그 다음은 책 이야기를 했었네요.

각자 체크인은 지아님은 'Panic', 컴키드님은 '초심', 하야로비 '방황', gsong '성장통', soonoh '행운', D군 '우쭐우쭐' 로 했습니다.

월간회고에서는 다들 어떻게 한달을 보냈는지 이야기들을 많이 했고, 이 와중에 슬슬 수다에 불이 지펴진 듯 합니다.ㅎㅎ

주제별 토론 중 채택되지 못한 것 중에 흥미로운 것들을 몇개 메모해놨는데, 개발자의 대화 방법과 code review 다음에 기회가 되면 이런 거 얘기해보면 재밌을 것 같네요.

책 이야기에서는 많은 목록이 나왔는데

  • GoF 디자인 패턴
  • 드림버스터
  • 고추장, 책으로 ...
  • 달인, master mind
  • 마지막 강의
  • game coding complete
  • 30대 심리학
  • 타나토노트
  • 프로그래밍 수련법
  • 팡세

등이 있었네요.

컴키드님이 이번 모임에 대해 무형식의 형식이라는 표현을 쓰셨는데, 아주 적절하네요. 점점 수다 모임처럼 되고 있는데 이게 나쁜 건 아니라고 봅니다. 긍정적인 부분도 많고요. 다만 '컨텍스트안에 녹여내기' 를 하기 위해 대화의 주제를 적절히 계속 바꿔가면 좋을 것 같고, 지금처럼 이야기해보고 싶은 소재를 하나씩 꺼내놓는 방법이 계속 유효할 것 같네요.

새로오신 두 분도 반가웠구요. 하야로비님은 금새 적응하셨고, 자바로 게임개발하는 이야기들도 아주 흥미로웠습니다. soonoh 님도 다음에는 더 잘 적응된 모습을 보여주리라 믿습니다. ㅎㅎ

아무튼 그렇게 재밌게 또 정기모임을 마쳤네요. 다들 공부 열심히 하시고 다음에 뵙지요.

(모임에서 이것 저것 노트한 게 있었는 데 집에 있어서 저녁에 내용을 좀 더 추가할 예정입니다. 조금 추가했습니다. ^^)

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/07/29 01:09 2008/07/29 01:09
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/397

  1. Tracked from 일상 혹은 이상 2008/07/28 22:03 DELETE

    Subject: SICP : 7월 정기 모임 후기

    비가 부슬부슬 내리는 토요일 오후.. SICP 스터디의 4번째 정기 모임이 있었다. 점점 무형식의 형식을 갖춰가는 SICP 정기 모임은 이제는 거의 뭐.. 개발자들의 수다 모임이라고 불러도 될 것 같?

  2. Tracked from 일일신우일신 2008/07/28 23:52 DELETE

    Subject: SICP 7월 정기모임

    지난 토요일(26일) SICP 스터디 모임 7월 정기 모임이 있었습니다. 평소 생각만 하고 집에서 시간을 너무 딱 맞춰 나갔는데, 비가 무지 많이와서 버스도 늦게오고 길도 안 좋고.. 좀 많이 늦게 ?

 

SICP 2008/6 정기모임 회고


SICP 정기모임이 있었습니다. 첫번째 모임에서 뵀던 반가운 분들과 이번에 새로 인사를 드리게 된 솔리드원 님과 함께 했습니다.

모임 순서나 어떤 이야기들이 오갔는지는 다른분들이 많이 하셨으니 그냥 넘어가도록 하고, 가장 많은 시간을 할애했던 주제는 '스터디모임을 어떻게 굴릴까?' 라는 주제였습니다.

많은 분들이 알게 모르게 비슷한 문제점들을 느끼고 계셨더군요. 모임 체크인 발언에서 솔리드원님이 해주신 "긍정적 태도로 공부할 수 있게 해보자" 는 말과도 일맥상통하는 이야기입니다. 그러니까 시나브로 우리는 Inner Game 에서 말하는 Self1 에 사로잡혀 있었던 거지요.

즐거운 토론 끝에 그룹의 대화를 늘리자는 데 모두 동의 했습니다. 대화 속에 문제 풀이나 공부 이야기를 섞어놓자는 거지요. 좋은 시도라고 봅니다.

자 이제 Self2 oriented study 를 해보자구요. 
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/06/17 14:53 2008/06/17 14:53
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/315

  1. Tracked from 일일신우일신 2008/06/17 15:50 DELETE

    Subject: [2008년 6월 SICP 정기모임] 즐거웠어요~

    6월 14일 어제, 강남에서 SICP 6월 정기모임이 있었습니다. 저는 아침에 일찍 일어나 도서관 들렸다가 모임 장소로 갔더니 약속시간 보다 20분 일찍 도착해서 금강제화 앞 화단에 걸터앉아 책보?

  2. Tracked from 일상 혹은 이상 2008/06/17 23:02 DELETE

    Subject: SICP : 6월 정기 모임 후기

    지난 토요일 SICP 스터디 6월 정기 모임이 있었다. 원래 그날에 강남에서 결혼식 1건, 수원에서 돌잔치 1건이 있어서 스터디는 포기하고 있었는데.. 결혼식장에서 밥 안 먹고 나왔더니 시간이 ?

 

2008/03 2주째 SICP 스터디 회고


스터디계획

Fact

주중에 30분씩이라도 공부해보겠다는 게 무색할 정도로 하나도 하지 못했네요. 그나마 주말에 몰아서 밀린 연습문제를 풀긴 했지만 그마저도 목표치에 도달하지 못했습니다.

Feeling

연습문제만 풀고 넘어가다보니 챕터 1 을 통해 책에서 하고 싶었던 이야기가 뭔지 모르게 돼버렸습니다. 챕터를 관통하는 주제를 염두에 두고 공부를 해야겠습니다.

Finding

수식 입력 용으로 마이크로소프트 워드를 사용하고 있는데 아주 좋네요. 뒤쪽에 증명 문제도 있다고 하니 유용하게 쓸 수 있을 것 같습니다.

Future Action

지킬 수 있는 계획으로 수정해야 겠습니다. 지키지 못하는 계획은 심적인 부담만 주는 것 같아요.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/03/18 00:07 2008/03/18 00:07
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/249

 

2008/03 1주째 SICP 스터디 회고


스터디계획

Fact

책을 읽을 시간은 주말 밖에 없는데, 이번 주는 스키장을 다녀오느라 공부를 하지 못했습니다.

Feeling

문제 난이도가 점점 생기는 게 재밌기는 한 데 시간이 너무 많이 걸리네요.

Finding

1.12 에 대한 질문에 대한 답변을 보니 이런것도 가능하구나 했습니다.

Future Action

계획이 많이 늦어질려고 합니다. 주중에 자기전 40 분씩 시간을 내봐야겠어요. 일단 1.28 연습문제까지 금요일안으로 풀고 스터디 진도를 이어가겠습니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/03/09 20:50 2008/03/09 20:50
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/238

 

2008/02 5주째 SICP 스터디 회고


스터디계획

Fact

주중에는 공부를 하지 못했습니다. 주말 시간을 이용해서 계획한 양만큼 책을 읽었고, 연습 문제는 주말에과 다음 주중을 이용하여 풀 생각입니다. 책 읽은 시간 : 2시간  문제풀이 시간:1시간  (진행중)

Feeling

아직 챕터1 인데도 문제 푸는 데 걸리는 시간이 점점 늘어나고 있네요. 생각할 꺼리를 많이 던져주는 것 같습니다. 스터디그룹의 다른 분들과 얘기를 많이 하면서 진행해야 발전이 있을 것 같습니다.

Finding

프로그래밍을 넘어 수학이나 알고리즘등 여러 생각할 꺼리들을 제공해주는 것 같아 좋네요.

Future Action

메일링리스트에서 문제 풀이와 관련된 토론에 열심히 참여해야겠습니다. 

Feedback 이 있으시면 답글을 달아주세요.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/03/02 01:16 2008/03/02 01:16
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/230

 

SICP 연습문제 풀이 1.39


[CODE]
(define (square x) (* x x))
(define (tan-cf x k)
  (define (d-tan i) (- (* 2 i) 1))
  (define (n-tan i)
    (if (= i 1)
        x
        (square x)))
  (cont-frac n-tan d-tan k))
[/CODE]
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 18:12 2008/01/31 18:12
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/310

 

SICP 연습문제 풀이 1.38


[CODE]
(define (n-e i) 1.0)
(define (d-e i)
  (if (= 2 (remainder i 3))
      1.0
      (* 2 (/ (+ i 1) 3))))

[/CODE]

> (+ 2 (cont-frac n-e d-e 10))
2.4813757546665216
>
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 18:05 2008/01/31 18:05
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/309

 

SICP 연습문제 풀이 1.37


a.

[CODE]
(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (display v1)
    (newline)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))

(define tolerance 0.00001)

(define (average x y) (/ (+ x y) 2))

(define (cont-frac n d k)
  (define (cont-frac-iter i)
    (if (= i k) 0
        (/ (n i) (+ (d i) (cont-frac-iter (+ i 1))))))
  (cont-frac-iter 1))
[/CODE]

> (/ 1 (cont-frac (lambda (x) 1.0) (lambda (x) 1.0) 10))
1.6176470588235294

> (/ 1 (cont-frac (lambda (x) 1.0) (lambda (x) 1.0) 12))
1.6179775280898876
> (/ 1 (cont-frac (lambda (x) 1.0) (lambda (x) 1.0) 13))
1.6180555555555558

b.
[CODE]
(define (cont-frac n d k)
  (define (cont-frac-iter i result)
    (if (= i 0) result
        (cont-frac-iter (- i 1) (/ (n i) (+ (d i) result)))))
  (cont-frac-iter k 0))

[/CODE]
> (/ 1 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 13))
1.6180257510729614

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 17:37 2008/01/31 17:37
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/308

  1. Tracked from 1.6180 2009/03/30 16:58 DELETE

    Subject: 연습문제 1.37

    (define (cont-frac n d k)  (define (cont-rep i)    (if (= i k) 0        (/ (n i) (+ (d i) (cont-rep (+ i 1))))))  (cont-rep 1)) (define (cont-frac2 n d k)  (define (cont-iter answer i)    (if (= i 1) answer        (cont-iter (/ (n i

 

SICP 연습문제 풀이 1.36


[CODE]
(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (display v1)
    (newline)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))

(define tolerance 0.00001)
[/CODE]

> (fixed-point (lambda (x) (/ (log 1000) (log x))) 3)
3
6.287709822868153
3.757079790200296
5.218748919675315
4.180797746063314
4.828902657081293
4.386936895811029
4.671722808746095
4.481109436117821
4.605567315585735
4.522955348093164
4.577201597629606
4.541325786357399
4.564940905198754
4.549347961475409
4.5596228442307565
4.552843114094703
4.55731263660315
4.554364381825887
4.556308401465587
4.555026226620339
4.55587174038325
4.555314115211184
4.555681847896976
4.555439330395129
4.555599264136406
4.555493789937456
4.555563347820309
4.555517475527901
4.555547727376273
4.555527776815261
4.555540933824255
4.555532257016376

With average damping
[CODE]
(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (display v1)
    (newline)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))

(define tolerance 0.00001)

(define (average x y) (/ (+ x y) 2))

[/CODE]
> (fixed-point (lambda (x) (average x (/ (log 1000) (log x)))) 3)
3
4.643854911434076
4.571212264484558
4.558225323866829
4.555994244552759
4.555613793442989
4.5555490009596555
4.5555379689379265
4.55553609061889
>

Average damping 사용 시 근사 값을 훨씬 빨리 찾는 것을 알 수 있다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 17:27 2008/01/31 17:27
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/307

 

SICP 연습문제 풀이 1.35


f(x) = 1 + 1/x
일때 fixed point transformaiton 을 하면
f(x) = x
->  1 + 1/x = x 양변에 x 를 곱해서
x + 1 = x^2

golden ration phi 는 위 식을 만족시키는 값이다. 증명끝.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 16:10 2008/01/31 16:10
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/306

 

SICP 스터디 연습문제 풀이 1.34


> (f f)
. procedure application: expected procedure, given: 2; arguments were: 2
>

이런 에러가 난다.
(f f)
-> (f 2)
-> (2 2)

가 되어 위의 에러가 난다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 15:54 2008/01/31 15:54
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/305

 

SICP 연습문제 풀이 1.33


[CODE]
(define (filter-accumulate filter combiner null-value term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (combiner result
                                 (if (filter a)
                                     (term a)
                                     null-value)))))
  (iter a null-value))

[/CODE]

a.
앞의 연습문제에서 풀었던 prime 넘버 알아보는 프로시져를 가져오자.
[CODE]
(define (smallest-divisor n)     
  (find-divisor n 2))     
    
(define (find-divisor n test-divisor)     
  (cond ((> (square test-divisor) n) n)     
        ((divides? test-divisor n) test-divisor)     
        (else (find-divisor n (+ test-divisor 1)))))     
    
(define (divides? a b)     
  (= (remainder b a) 0))     
    
(define (prime? n)     
  (= n (smallest-divisor n)))     
    
(define (square x) (* x x))  
(define (timed-prime-test n)  
  (newline)  
  (display n)  
  (start-prime-test n (runtime)))  
(define (runtime) (current-milliseconds))  
(define (start-prime-test n start-time)  
  (if (prime? n)  
      (report-prime (- (runtime) start-time))))  
(define (report-prime elapsed-time)  
  (display " *** ")  
  (display elapsed-time))  
(define (search-for-primes rangestart)  
  (define (SFP-iter start-time n)  
    (newline)  
    (display n)  
    (if (prime? n) (report-prime (- (runtime) start-time))  
        (SFP-iter start-time (+ n 2))))  
  (if (even? rangestart) (SFP-iter (runtime) (+ rangestart 1))  
      (SFP-iter (runtime) rangestart)))  
[/CODE]

위에 정의된 prime? 를 이용하면
[CODE]
> (filter-accumulate prime?
                     (lambda (x y) (+ x y))
                     0
                     (lambda (x) (* x x))
                     1
                     (lambda (x) (+ x 1))
                     5)
39
[/CODE]

b.
[CODE]
(define (1_33 n)
  (filter-accumulate
   (lambda (x) (= 1 (gcd x n)))
   (lambda (x y) (* x y))
   1
   (lambda (x) x)
   1
   (lambda (x) (+ x 1))
   n))
[/CODE]

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 14:24 2008/01/31 14:24
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/304

 

SICP 연습문제 풀이 1.32


[CODE]
; Recursive
(define (accumulate combiner null-value term a next b)
  (if (> a b)
      null-value
      (combiner (term a) (accumulate combiner null-value term (next a) next b))))

; Iterative
(define (accumulate combiner null-value term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (combiner result (term a)))))
  (iter a null-value))

; Sum
> (accumulate (lambda (x y) (+ x y)) 0 term 1 next 5)
15
; Product
> (accumulate (lambda (x y) (* x y)) 1 term 1 next 4)
24
[/CODE]
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/31 13:57 2008/01/31 13:57
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/303