연습문제 1.12 문제를 잘못 이해해서 풀이를 포기하고 솔루션을 찾아봤는데, 성분의 합이 아닌 특정 위치의 성분이 어떤 값인지 구하는 문제였다. 솔루션을 본 상태에서 다시 짠 해답 function pascal(index, row) { return row === 1 ? 1 : index === 1 || index === row ? 1 : pascal(index -1, row -1) + pascal(index, row -1); } CS/SICP in JS 2023.02.10
연습문제 1.11 재귀 function f(n){ return n < 3 ? n : f(n-1) + 2 * f(n-2) + 3 * f(n-3); } 반복 function f_m(n) { return n < 3 ? n : f_iter(2, 1, 0, n); } function f_iter(a, b, c, count){ return count === 0 ? a : f_iter(a + 2 * b + 3 * c, a, b, count -1) } CS/SICP in JS 2023.02.10
연습문제 1.10 주어진 함수를 정의하면 A(x, y) = { 0 만일 y가 0이면 2 * y 만일 x가 0이면 2 만일 y가 1이면 A(x - 1, A(x, y -1))); 그밖의 경우 } 따라서 A(1,10)는 A(1, 10) A(0, A(1, 9)) 2 * A(1, 9) 2 * A(0, A(1,8)) ..... 2^10 A(2,4)는 A(2, 4) A(1, A(2,3)) A(1, A(1, A(2, 2)))) A(1, A(1, A(1, A(2, 1))))) A(1, A(1, A(1, 2)))) A(1, A(1, A(0, A(1, 1)))) A(1, A(1, A(0, 2)))) A(1, A(1, 4))) A(2, 4) -> A(1, A(1, 4)) -> A(1, 16) 2^16 A(3,3)는 A(3, 3) A(2, A(.. CS/SICP in JS 2023.02.10
연습문제 1.9 1번(재귀적) inc(plus(dec(4), 5))); inc(plus(3, 5))); inc(inc(plus(dec(3), 5))).... 2번(반복적) plus(4, 5) plus(3 ,6) plus(2, 7) CS/SICP in JS 2023.02.10
연습문제 1.7 큰 값을 집어넣거나 아주 작은 값을 넣으면 부동소수점 문제로 인해 올바른 결과를 출력하지 못한다. 아주 큰 수의 경우, improve가 계속해서 같은 답을 생성하게 되어, good-enough?를 탈출할 수 없는 무한 루프에 빠지게 된다. 작은 숫자의 경우, good-enough에서 정의한 정밀도로 오차를 계산하는 게 의미가 없음을 직관적으로 알 수 있다. 문제에서 주어진대로 good-enough를 어림잡은 값을 헌값에 견주어 고쳐나가는 방식으로 수정하면, 큰 수와 작은 수에서도 문제없이 작동하게 된다. CS/SICP 2022.05.03
연습문제 1.6 new-if는 함수이고, 프로시저가 적용되기 이전에 인자를 평가한다. 따라서 세번째 인자인 sqrt-iter를 평가하게 되면서 무한 루프에 빠지게 된다. CS/SICP 2022.05.03
연습문제 1.5 인자 먼저 계산하는 실행기라면 (p)의 값을 구할 수 없으므로 실행기가 무한으로 (p)의 값을 평가하는 부분에서 무한으로 돌게 된다. 정의한 대로 평가한다면 test의 조건문에서 y의 값을 평가할 일이 생기지 않기 때문에 0이라는 결과가 나오게 된다. CS/SICP 2022.05.02
연습문제 1.4 B가 0보다 크다면 두 수를 더하고, 아니라면 뺀다. 결과적으로 B를 절댓값 처리하고 더해주는 꼴이 된다. 조건문의 결과로 연산자가 반환이 된다 신기하다 CS/SICP 2022.05.02