게시판 인덱스

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

run 함수값(리턴값) type 정의가 좀 어색합니다.

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



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2006년9월26일 1:53    주제: run 함수값(리턴값) type 정의가 좀 어색합니다. 인용과 함께 답변

이희종 씀:

뼈대에는 run함수가 무조건 1을 리턴하고 이것을 화면에 표시하지만 실제 구현하실 때는 run함수의 리턴값을 화면에 표시하시면 안됩니다.


뼈대에서도 run이 실행되었을 때 1이 출력되는 것은 아니지 않습니까? 궁극적으로 어떤 값이 화면에 출력되기 위해서는 run은 무조건 unit값을 가져야 하는 것 아닌가요?

그런데 KEVAL에 run의 함수값 type이 value로 고정되어 있습니다. 그러므로 value는 unit type이어야 한다는 얘긴데요. 이런 맥락에서는,,

코드:
type memory = value Mem.t


와 같이 정의하는 것은 넌센스가 되어 버립니다.

저 같은 경우는 KEVAL은 건드리지 않았지만, Keval에 내부 함수와 새로운 타입value_a를 정의하여 구현했습니다.

또한 위와 같은 맥락에서는 v2s 또한 무의미한 함수가 되어 버립니다. v2s는 value-> string 함수이고 모듈 타입에 정의된 의도는 아마도 출력에 써먹기 위함이었을 것입니다. 하지만 value는 동시에 run의 함수값 타입이기 때문에 unit이어야만 합니다. 즉 v2s: unit->string 함수가 되어버려 원래 의도했음직한 v2s:int->string와는 차이가 있습니다. 저같은 경우엔 역시 v2s_a를 따로 정의하여 써먹었습니다.

결론적으로 run: memory * env * program -> unit 이 되는 것이 더 합리적이 아닌가 생각합니다. 물론 지금 와서 스펙이 바뀌면 안되겠지만요 ^^;;
위로
사용자 정보 보기 비밀 메시지 보내기
이희종



가입: 2006년 3월 7일
올린 글: 50

올리기올려짐: 2006년9월26일 13:37    주제: 인용과 함께 답변

뼈대의 구현이 좀 혼동되게 되어있었던 것 같습니다.

뼈대에서는 run함수가 무조건 1을 리턴하고 이 리턴값을 v2s 함수로 string으로 바꾼 후

화면에 표시하게 되어있습니다. 이것은 단순히 뼈대의 동작을 보여주기 위한 것이며

실제 구현하실 때는

value 타입을 int, true, false, unit을 모두 포섭할 수 있도록 정의하시고 run함수를 불러

반환되는 값은 ignore 등의 함수를 사용하여 화면에 표시하지 않고 그냥 무시하시면

됩니다.

인용:
결론적으로 run: memory * env * program -> unit 이 되는 것이 더 합리적이 아닌가 생각합니다. 물론 지금 와서 스펙이 바뀌면 안되겠지만요 ^^;;


run: memory * env * program -> unit으로 정의해도 무리는 없습니다만 1+1과 같은

프로그램이 아무것도 하지 않는 프로그램이 되겠죠.

run: memory * env * program -> value로 정의한다면 리턴값으로 2가 나오게 될거구요.

물론 이값은 이번 숙제에서는 사용하지 않으므로 화면에 표시되지 않고 무시되겠지만요.
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2006년9월26일 17:03    주제: 인용과 함께 답변

1) 아...main.n을 보니 정말 그렇게 되어 있네요.

그런데 반드시 제공된 뼈대에 적합하도록 짜야 하나요?

저의 경우에는 2.n만 보면서 짜고 있는데요. 단순히 Keval.run을 실행했을 때 인자로 입력된 프로그램이 제대로 실행되도록만 구현하였습니다. 예를 들어
코드:
WRITE(ADD(NUM 1, NUM 2))
같은 프로그램을 인자로 받으면 run은 화면에
코드:
 3
을 출력하고 정지하는데요. 그냥 이 조건만 충족시키면 안 되나요?


2)
인용:
value 타입을 int, true, false, unit을 모두 포섭할 수 있도록 정의하시고 run함수를 불러 반환되는 값은 ignore 등의 함수를 사용하여 화면에 표시하지 않고 그냥 무시하시면 됩니다.


라고 하셨는데, 사실

코드:
type value = int | bool | unit
이런 식으론 안 되니까
코드:
type value = Val of int ...
뭐 이런 식으로 해야 할 텐데요. 이렇게 한번 껍질을 덧씌웠을 경우, Keval.run의 리턴값이 value 타입으로 되어 있는지라 프로그램을 실행하기가 좀 난감해지는 문제가 있습니다. 예를 들어 뭔가 출력을 하는 프로그램의 경우 함수값인 value 타입이 unit이어야 할 텐데, value 타입이 Unit of unit 같은 식으로 되어 있으면 run을 실행해도 아무일도 안 일어나지 않습니까?

실은 이것은 nML 자체에 대한 질문일 수도 있는데요. 그러니까 C언어같은 경우는 함수 A 내부에서 프로시저 p를 돌릴 경우 A의 리턴값에 상관없이 p가 동작하지 않습니까? 반면 nML에서는 프로시저 p를 돌리기 위해선 함수 A의 함수값 자체가 p(x)와 같은 게 되어야 하는데요. 제가 아직 nML에 익숙하지 않아서인지 모르겠지만 상당히 불편하게 느껴집니다.
위로
사용자 정보 보기 비밀 메시지 보내기
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2006년9월27일 20:23    주제: 인용과 함께 답변

; 를 사용하면 함수 정의 내에서 sequence를 구현할 수 있군요. 그럼 출력에도 아무 문제가 없네요...

이런 간단한 문법을 몰라 계속 헛소리를 해댔습니다 ㅠ.ㅠ
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2006) 시간대: GMT + 9 시간(한국)
페이지 11

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


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