이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
유.강민
가입: 2011년 3월 22일 올린 글: 38
|
올려짐: 2011년4월27일 0:27 주제: 재귀함수가 작동 안합니다. |
|
|
코드: | (rec x y => (ifzero y then 0 else (x x (y - 1)))) 5 |
위와 같이 테스트하면 evalm m에서
코드: | Fatal error: exception M.RuntimeError("not a number value") |
오류가 뜹니다. x x 대신 x하나면 넣으면 제대로 나오는군요.
자기자신을 호출할때 정의상 자기 자신을 인자로 넣어줘야되지 않나요? |
|
위로 |
|
![](templates/subSilver/images/spacer.gif) |
정영범
가입: 2005년 9월 5일 올린 글: 167
|
올려짐: 2011년4월27일 0:56 주제: |
|
|
예, 넣어줘야하는데 조교가 빼먹었군요.
고쳐서 올리도록 하겠습니다.
-----------------------
제가 착각했네요.
다시보니 APP에서 F일때랑 R일때를 구분해서 제대로 구현했네요.
조교가 말한 것처럼 원하시는 결과를 얻으려면
x (x (y - 1))을 쓰셔야 합니다.
x x (y-1)로 쓰시면 x에 인자로 x와 (y-1)을 넘겨주는 것과 같아서
x가 number가 아니라는 에러가 발생합니다.
정영범 가 2011년4월27일 9:06에 수정함, 총 1 번 수정됨 |
|
위로 |
|
![](templates/subSilver/images/spacer.gif) |
김진영_
가입: 2009년 12월 9일 올린 글: 337
|
올려짐: 2011년4월27일 8:57 주제: |
|
|
x를 한 번만 쓰시는 것이 맞습니다.
M0의 문법에 따라, 자기 자신의 이름을 적어 주는 부분은 recursive function을 정의하는 "rec id id =>e " 의 경우이고요, 함수를 apply하는 부분인 "e e"에는 첫 번째 자리에 함수(fn 또는 rec 타입의), 두 번째 자리에 함수가 인자로 받을 것을 넣어 주시기만 하면 됩니다.
즉
코드: | (rec x y => (ifzero y then 0 else (x (y - 1)))) 5 |
위와 같이 해 보시면 eval의 결과는 0이 됩니다. |
|
위로 |
|
![](templates/subSilver/images/spacer.gif) |
|