BLOG ARTICLE Announce | 33 ARTICLE FOUND

  1. 2011.08.15 라마누잔 수
  2. 2011.07.05 Chapter.3 스터디 일정
  3. 2011.06.28 3.4 병행성. 관련 슬라이드
  4. 2011.03.15 Chapter.2 스터디 일정 2
  5. 2011.01.16 ch 2.2.2 계층구조
  6. 2011.01.11 ch 2.1.4 집중 과제: 구간 산술 연산 만들기
  7. 2011.01.05 연습문제 2.6
  8. 2011.01.05 연습문제 2.4 ~ 2.5
  9. 2011.01.05 2.1.3
  10. 2011.01.01 연습문제 2.2 ~ 2.3

어떤 수가 두 수의 세제곱을 합한 값일때, 그렇게 만들 수 있는 방법이 2개 이상인 수를 라마누잔 수라고 함. 446 페이지, 연습문제 3.71에 나옴

참고

AND

2011년 5월 12일 (목)
  • 범위 : ~ 3.1.2 (모두들 한번씩 보아요~)
2011년 5월 19일 (목)
  • 범위 : ~ 3.2
  • 발표 : 정다정
2011년 5월 24일 (화)
  • 범위 : ~ 3.3.1
  • 발표 : 정다정 

2011년 6월 15일 (수)
  • 범위 : ~ 3.3.4

2011년 6월 21일 (화)
  • 범위 : ~ 3.3.5

2011년 6월 28일 (화)
  • 준비 : 정다정, 전현철
  • 범위 : ~ 3.4.2 p399

2011년 7월 5일 (화)
  • 범위 : 3.4.2 p399 ~
     
2011년 7월 12일 (화)
  • 범위 : 3.5.1 ~ 3.5.2
AND

AND

1월 4일 (화)
  • 발표 : 유훈종(intro, 2.1.1, 2.1.2, 2.1.3)
1월 6일 (목)
  • 리뷰 : 유훈종 (intro, 2.1.1, 2.1.2, 2.1.3)
  • 발표 : 유승근 (2.1.4)
1월 11일 (화)
  • 리뷰 : 정다정 (2.1.4)
  • 발표 : 유훈종 (2.2.1)
1월 13일 (목)
  • 리뷰 : 전현철 (2.2.1)
  • 발표 : 유승근 (2.2.2)
1월 18일 (화)
  • 리뷰 : 유승근 (2.2.2)
  • 발표 : 전현철 (2.2.3-a)
1월 20일 (목)
  • 리뷰 : 유훈종 (2.2.3-a)
  • 발표 : 정다정 (2.2.3-b)
1월 27일 (목)
  • 리뷰 : 생략
  • 발표 : 전현철 (~겹친매핑, 2.2.3 완료), 정다정 (2.2.3-b)
2월 8일 (화)
  • 리뷰 : 전현철
  • 발표 : 유승근 (2.2.4, ~그림틀)
2월 10일 (목)
  • 리뷰 : 생략
  • 발표 : 전현철 (2.2.4 완료)
2월 15일 (화)
  • 리뷰 : 전현철
  • 발표 : 유승근, 전현철(~ 2.3.2)
  • 문제풀이 : 유승근(2.53, 2.54, 2.55), 유훈종(2.56, 2.57), 전현철(2.58)
2월 17일 (목)
  • 리뷰 : 전현철
  • 발표 : 정다정(~ 2.3.3 - ex.2.62)
  • 문제풀이 : 유승근(2.59), 유훈종(2.60), 전현철(2.61), 정다정(2.62)
2월 22일 (화)
  • 리뷰 : 유승근
  • 발표 : 유훈종(~ 2.3.3)
  • 문제풀이 : 전현철(2.63 ~ 2.65)
2월 24일 (목)
  • 리뷰 : 전현철
  • 발표 : 정다정(~ 2.3.4)
  • 문제풀이 : 전현철(2.67, 2.68), 유승근(2.69, 2.70), 유훈종(2.71, 2.72)
3월 3일 (목)
  • 리뷰 : 유훈종
  • 발표 : 전현철(2.4.1), 정다정(2.4.2)
3월 10일 (목)
  • 리뷰 : 전현철
  • 발표 : ~(2.4.3)
3월 17일 (목)
  • 발표 : 전현철(2.4.3), 가능하다면 2.5.1
  • 문제풀이 : 정다정(2.73), 유승근(2.74), 유훈종(2.75), 전현철(2.76)
3월 24일 (목)
  • 발표 : 정다정(2.5.1)
  • 문제풀이 : 정다정(2.77), 전현철(2.78), 유승근(2.79), 유훈종(2.80)
4월 1일 (금)
  • 범위 : 2.5.2
  • 문제풀이 : 개별 풀이 진행
5월 3일 (화)
  • 범위 : 2.5.2 ~ 2.5.3 (마무리~)
AND

2.2.1에서 값만 포함된 차례열(sequence)를 대상으로 표현 방법과 연산을 짜 보았다면, 2.2.2에서는 이를 일반화하여 원소에 차례열이 있는 경우까지로 확장하여 설명한다. 그림으로 나타내면 나무꼴 형태가 되며, 주어진 인자가 값인지 쌍인지 확인하기 위해 pair? 술어 프로시저를 사용할 수 있다.

연습문제 2.28 fringe 프로시저를 짜는 부분이 직관적으로 다가오지 않는다. 연습문제 2.24~2.29는 github 참조. 특히 연습문제 2.29 풀이는 스터디 시간에 풀이한 line 420~459 코드가 좀 더 명확하니 참고하시길.

AND

소스 코드는 github suguni/sicp/ch2.1.rkt 참조. line 256 부터 시작함.

2.14~2.16에 대한 해석 추가

책에 정의되어 있는 interval 데이터에 대한 산술연산 프로시저의 결정적 문제는 항등원이 정의되어 있지 않다는 점이다. 즉, A / A = I, A * I = A 를 만족하는 항등원이 정의되어 있지 않다. 2.16에서 말한 흠이 없는 구간-산술 연산 꾸러미를 만드는 것은 항등원을 먼저 정의하고, 이에 따라 위 조건에 맞는 *, / 연산을 다시 짜야 한다. *,/ 연산을 재정의 한 것(실패함)에 대한 내용은 소스 주석 참조.

AND

; ex_2_6

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

; one
;(add-1 zero)
;(lambda (f) (lambda (x) (f ((zero f) x))))
;;((zero f) x)
;;((lambda (x) x) x)
;;x
;(lambda (f) (lambda (x) (f x)))
(define one (lambda (f) (lambda (x) (f x))))

; two
;(add-1 one)
;(lambda (f) (lambda (x) (f ((one f) x))))
;((one f) x)
;(((lambda (a) (lambda (b) (a b))) f) x)
;((lambda (b) (f b)) x)
;(f x)
;(lambda (f) (lambda (x) (f (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))

; three
(define three (lambda (f) (lambda (x) (f (f (f x))))))

; add
;(define (add a b) (lambda (f) (lambda (x) ("?"))))
;suppose a = 3, b = 3
;("?")
;(fa (fa (fa (fb (fb (fb x))))))
;(fa (fa (fa ((b f) x))))
;((a f) ((b f) x))

(define (add a b)
  (lambda (f)
    (lambda (x)
      ((a f) ((b f) x)))))
AND

; ex 2.4

; ex 2.5

(define (power x n)
  (define (power-iter r c)
    (if (= c 0)
        r
        (power-iter (* r x) (- c 1))))
  (power-iter 1 n))

(define (cons a b)
  (lambda (m) (m a b)))

(define (car z)
  (z (lambda (p q) (power 2 p))))

(define (cdr z)
  (z (lambda (p q) (power 3 q))))
AND

2.1.3

Announce/Chapter.2 2011. 1. 5. 22:30
; 2.1.3

(define (cons x y)
  (define (dispatch m)
    (cond ((= m 0) x)
          ((= m 1) y)
          (else (error "error"))))
  dispatch)

(define (car z) (z 0))

(define (cdr z) (z 1))
AND

; ex 2.2

; point
(define (make-point x y) (cons x y))
(define (x-point p) (car p))
(define (y-point p) (cdr p))
(define (point2str p)
  (format "(~a,~a)"
          (x-point p) (y-point p)))
(define (print-point p)
  (newline)
  (display (point2str p)))

; segment
(define (make-segment p1 p2) (cons p1 p2))
(define (start-segment s) (car s))
(define (end-segment s) (cdr s))
(define (segment2str s)
  (format "~a->~a"
          (point2str (start-segment s))
          (point2str (end-segment s))))
(define (print-segment s)
  (newline)
  (display (segment2str s)))

(define (midpoint-segment s)
  (define (average a b) (/ (+ a b) 2))
  (let ((p1 (start-segment s))
        (p2 (end-segment s)))
    (make-point (average (x-point p1) (x-point p2))
                (average (y-point p1) (y-point p2)))))

; ex 2.3

; rect

(define (make-rect tl-point br-point) (cons tl-point br-point))
;(define (make-rect p1 p2) (cons p1 p2))
(define (top-left-rect r) (car r))
(define (top-right-rect r)
  (make-point (x-point (cdr r)) (y-point (car r))))
(define (bottom-left-rect r)
  (make-point (x-point (car r)) (y-point (cdr r))))
(define (bottom-right-rect r) (cdr r))
;(define (top-left-rect r)
;  (let ((x1 (x-point (car r)))
;        (y1 (y-point (car r)))
;        (x2 (x-point (cdr r)))
;        (y2 (y-point (cdr r))))
;    (make-point (min x1 x2) (max y1 y2))))
;(define (top-right-rect r)
;  (let ((x1 (x-point (car r)))
;        (y1 (y-point (car r)))
;        (x2 (x-point (cdr r)))
;        (y2 (y-point (cdr r))))
;    (make-point (max x1 x2) (max y1 y2))))
;(define (bottom-left-rect r)
;  (let ((x1 (x-point (car r)))
;        (y1 (y-point (car r)))
;        (x2 (x-point (cdr r)))
;        (y2 (y-point (cdr r))))
;    (make-point (min x1 x2) (min y1 y2))))
;(define (bottom-right-rect r)
;  (let ((x1 (x-point (car r)))
;        (y1 (y-point (car r)))
;        (x2 (x-point (cdr r)))
;        (y2 (y-point (cdr r))))
;    (make-point (max x1 x2) (min y1 y2))))
(define (rect2str r)
  (format "tl=~a\ntr=~a\nbl=~a\nbr=~a"
          (top-left-rect r)
          (top-right-rect r)
          (bottom-left-rect r)
          (bottom-right-rect r)))
(define (print-rect r)
  (newline)
  (display (rect2str r)))

(define (width-rect r)
  (- (x-point (top-right-rect r)) (x-point (top-left-rect r))))
(define (height-rect r)
  (- (y-point (top-left-rect r)) (y-point (bottom-left-rect r))))
(define (area-rect r)
  (* (width-rect r) (height-rect r)))
(define (girth-rect r)
  (+ (* (width-rect r) 2) (* (height-rect r) 2)))
AND