게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

함수 이름과 파라메터 이름이 같을 수 있나요?

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
박상일



가입: 2009년 9월 27일
올린 글: 13

올리기올려짐: 2010년10월20일 22:05    주제: 함수 이름과 파라메터 이름이 같을 수 있나요? 인용과 함께 답변

안녕하세요? Smile

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되려고 하는 경우 등 -_-;Wink



안준환씨께서 올려주신 코드는 semantic에 따르면

함수가 나중에 bind되서 x(0)이 콜 되는게 맞아서 sm5에서는 실행되는데 K- 언어에서는 돌아가지 않네요 Smile

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    주제: 인용과 함께 답변

최종욱 씀:
그나저나 이런 점을 짚어내시다니 대단하시네요 ㅠㅠ

동감입니다. 매우 열정적인 모습이 보기 좋습니다.

답변이 늦었지만 함수이름과 인자의 이름이 같고 이것들이 동시에 바인딩 되는 것을 지원하지 않으셔도 됩니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay