이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박상일
가입: 2009년 9월 27일 올린 글: 13
|
올려짐: 2010년10월20일 22:05 주제: 함수 이름과 파라메터 이름이 같을 수 있나요? |
|
|
안녕하세요?
let proc x(x) = write x
in x(3)
위와 같은 코드가 3을 정상적으로 출력하는 것을 지원해야 하나요?
k--언어에서는 함수 호출시에, 자신의 이름을 바인딩한 이후 파라메터 이름을 바인딩하기 때문에 위와 같은 프로그램이 가능한 것 같습니다. 실제로 ./run -k source.k-- 하면 정상적으로 실행되는 것으로 보아 주어진 k-- 실행기는 이를 지원하는데요...
저희 프로그램이 번역해내는 sm5 프로그램도 이를 지원해야 하는지 궁금합니다. |
|
위로 |
|
 |
안준환
가입: 2010년 9월 2일 올린 글: 12
|
올려짐: 2010년10월20일 22:29 주제: |
|
|
제 생각에는 오히려 K-- 인터프리터의 구현이 틀린 것 같습니다.
교재 77페이지를 보면 재귀 호출을 지원하는 함수 호출 의미에서 함수와 인자가 environment에 추가되는 것을 다음과 같이 정의하고 있습니다.
따라서 인자가 먼저 bind되고 함수가 나중에 bind되기 때문에 박상일씨께서 말씀하신 코드는 오류가 발생하는 것이 맞습니다. (함수를 write할 수 없으므로)
반면 다음과 같은 코드는 실행되는 것이 맞겠지요. (이 코드를 실행시켰을 때 출력되는 결과는 3628800입니다.)
코드: | let i := 10 in
let proc x(x) =
if i < 1 then 1 else (i := i - 1; (i + 1) * x(0))
in
write x(0) |
제 의견은 이렇습니다만, 다른 분은 어떻게 생각하시는지 궁금하네요. |
|
위로 |
|
 |
최종욱
가입: 2009년 9월 15일 올린 글: 84
|
올려짐: 2010년10월20일 22:50 주제: |
|
|
제가 생각하기에도 이 부분은 K- 인터프리터가 틀린것 같네요..
이런 요상한 물건들은 채점 시에 테스트하지 않으실 것 같아요.
(함수 이름이랑 변수랑 같아서 동시에 bind되려고 하는 경우 등 -_-;
안준환씨께서 올려주신 코드는 semantic에 따르면
함수가 나중에 bind되서 x(0)이 콜 되는게 맞아서 sm5에서는 실행되는데 K- 언어에서는 돌아가지 않네요
k.ml 구현을 보면 417번째줄에서 param을 더 나중에 bind하고 있네요.
보통 다른 언어에서는 변수가 나중에 bind되는 모습을 많이 보이는 걸로 봐서...
아마 semantic을 고치는 쪽이 좀 더 자연스럽다는 생각을 해 봅니다.
그나저나 이런 점을 짚어내시다니 대단하시네요 ㅠㅠ _________________ Jongwook Choi
Seoul National University, School of Computer Science & Engineering |
|
위로 |
|
 |
조성근
가입: 2009년 9월 14일 올린 글: 283
|
올려짐: 2010년10월21일 0:01 주제: |
|
|
최종욱 씀: | 그나저나 이런 점을 짚어내시다니 대단하시네요 ㅠㅠ |
동감입니다. 매우 열정적인 모습이 보기 좋습니다.
답변이 늦었지만 함수이름과 인자의 이름이 같고 이것들이 동시에 바인딩 되는 것을 지원하지 않으셔도 됩니다. |
|
위로 |
|
 |
|