연습문제 1.10
다음 프로세스를 이용하여 f, g, h 프로시저의 기능을 수학으로 정의하는 문제이다.

프로시저 실행 문제의 답은 위와 같다.
실질적인 문제는 바로 다음인데…..나는 노가다(?)로 풀었다.
(f n) 의 경우
(g n)의 경우
(h n)의 경우
연습문제 1.10
다음 프로세스를 이용하여 f, g, h 프로시저의 기능을 수학으로 정의하는 문제이다.

프로시저 실행 문제의 답은 위와 같다.
실질적인 문제는 바로 다음인데…..나는 노가다(?)로 풀었다.
(f n) 의 경우
(g n)의 경우
(h n)의 경우
연습문제 1.9
같은 프로시져가 있을 때, 각각의 프로시저가 (+ 4 5)를 계산한다고 한다면 반복 프로세스인지 재귀 프로세스인지를 알아보는 문제이다.
솔직히 처음에 이 문제를 봤을때…둘다 재귀인 줄 알았다.
프로시저가 끝나기 전에 자신을 호출하고 호출하고….하지만 이것은 C언어가 아니었다.
역시나 한참을 헤매이다…노슈님의 블로그에서 해답을 찾았다.
관련 링크 : http://nosyu.egloos.com/4058585
첫 번째 프로시저의 실행 순서이다.
두 번째 프로시저의 실행 순서이다.
역시나 실행 순서를 보면 한눈에 들어온다.
즉, 첫 번째 프로시저는 재귀 프로세스(되도는 프로세스)이고, 두 번째 프로세스는 반복하는 프로세스이다.

참으로 허무한 문제다.
분명 나의 계산에는 이상이 없었다.
보고 또 보고, 계속 봐도 나는 틀린게 없었다.
뭐가 문제지?
답은 책이 잘못된 것이었다…..
관련 링크 : http://www.buggymind.com/72
한참을 끙끙대다가 인터넷의 도움을 받기로 하고 검색한 결과 어이없는 내용없다…(하하…)
문제인즉, 세제곱을 구하는 공식이 틀렸던 것이다.
아래의 공식이 정확한 공식이다.
![]()
아래는 바뀐 코드 내용이다.

앞서만든 제곱근 구하기 프로그램의 개량된 버전을 만드는 내용이다.
좀더 정확한 근사치를 구할 수 있도록 하는 프로그램인데…..
결과적으로 못풀었다.
알고리즘은 머리에 있는데….자세한 문법을 몰라 못풀었다.(…라고 말하고 싶다.)
앞으로의 숙제이다.
언제고 문제를 해결한다면 다시 이 포스팅을 다시 할 것이다. : )
아래에 미처 못 푼 코드를 남겨둔다.

제곱근을 구하는 식에서 사용한 if 라는 특별문을 임의의 프로시져로 바꾸어서 사용하는 문제이다.
즉,
를 다음과 같이 바꾸어서 실행했을 때 어떤 결과 값이 나오겠느냐….이다.
처음에 혼자서 문제를 풀어 보았다. 잘 되지 않아서 정답을 찾아 보았다…
관련 링크 : http://nosyu.egloos.com/4016689
아하! 안되는 것이 맞구나…근데 내꺼는 코드가 약간 이상한데…다시 수정을 한 후, 실행을 해 보았다.
그런데 결코 실행되어서는 안되는 코드가 척척 실행되는 것이다.
왜 이럴까…한참을 고민하고 또 고민했다…
나중에서야 어이없이 답을 알게 되었다.
깜박하고 제일 마지막….
부분을 입력을 안했던 것이다…..그런데 이상하게 실행을 척척 잘 되더라.
원래는 되지 않아야 하는것이 정상일텐데…아마도 아직 내가 모르는 무언가가 있는 듯 하다.
아무튼 문제를 해결하니 예상값이 정확하게 나왔다.
참, 답은 무한 루프이다.
변경된 new-if 에서 인자를 먼저 계산하니, (sqrt-iter (improve guess x) x) 부분에서 자꾸만 루프가 발생하는 것이다.

오른쪽 하단에 러닝이 계속 돌아가는 것이 보인다.
Stop을 누르니 kill 하겠냐는 메시지가 나온다. 당연히(?) Kill 했다.
