어떤 수가 두 수의 세제곱을 합한 값일때, 그렇게 만들 수 있는 방법이 2개 이상인 수를 라마누잔 수라고 함. 446 페이지, 연습문제 3.71에 나옴
참고
- 1729(Wikipedia): 첫번째 라마누잔 수로 (9 10)과 (1 12)의 두 가지 조합임, 9*9*9+10*10*10=1*1*1+12*12*12
- Durango Bill’s Ramanujan Numbers and The Taxicab Problem
어떤 수가 두 수의 세제곱을 합한 값일때, 그렇게 만들 수 있는 방법이 2개 이상인 수를 라마누잔 수라고 함. 446 페이지, 연습문제 3.71에 나옴
참고
주소 : http://inst.eecs.berkeley.edu/~scheme/
UC Berkeley의 CS61A(SICP) 강의에서 사용되는 Scheme. STk 의 수정버전이라고 하는데, 자세히는 모름. CS 강의에서 사용하기 위해 수정되어 있어, 책의 코드들을 실행하는데 모듈들이 포함되어 있음.
SICP 공부할때는 Racket 보다는 좋을듯 한데, 문제는 GUI REPL이 없다는 점. 일단 emacs의 inferior-scheme과 scheme-mode를 사용하면 좋을듯.
(require (planet "sicp-concurrency.ss" ("dyoo" "sicp-concurrency.plt" 1 1)))
2.2.1에서 값만 포함된 차례열(sequence)를 대상으로 표현 방법과 연산을 짜 보았다면, 2.2.2에서는 이를 일반화하여 원소에 차례열이 있는 경우까지로 확장하여 설명한다. 그림으로 나타내면 나무꼴 형태가 되며, 주어진 인자가 값인지 쌍인지 확인하기 위해 pair?
술어 프로시저를 사용할 수 있다.
연습문제 2.28 fringe 프로시저를 짜는 부분이 직관적으로 다가오지 않는다. 연습문제 2.24~2.29는 github 참조. 특히 연습문제 2.29 풀이는 스터디 시간에 풀이한 line 420~459 코드가 좀 더 명확하니 참고하시길.
소스 코드는 github suguni/sicp/ch2.1.rkt 참조. line 256 부터 시작함.
2.14~2.16에 대한 해석 추가
책에 정의되어 있는 interval 데이터에 대한 산술연산 프로시저의 결정적 문제는 항등원이 정의되어 있지 않다는 점이다. 즉, A / A = I, A * I = A 를 만족하는 항등원이 정의되어 있지 않다. 2.16에서 말한 흠이 없는 구간-산술 연산 꾸러미를 만드는 것은 항등원을 먼저 정의하고, 이에 따라 위 조건에 맞는 *, / 연산을 다시 짜야 한다. *,/ 연산을 재정의 한 것(실패함)에 대한 내용은 소스 주석 참조.