게시판 인덱스

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

숙제 7-1 테스트셋 및 질문입니다.

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2012)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
윤형석



가입: 2012년 9월 5일
올린 글: 26

올리기올려짐: 2012년12월5일 5:22    주제: 숙제 7-1 테스트셋 및 질문입니다. 인용과 함께 답변

테스트셋은 예전 게시판에 있습니다.

https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=2491



위 테스트셋에서 틀려 보이는 부분이 몇개 있습니다.

1.
코드:
 let val f = fn x=> write x in
 write 1;
 write "a";
 write true
 end
 (*ERROR !*)


코드:
 let val f = fn x=> write x in
 write 1; 3 end


위 두 테스트셋은 error가 아닌 것 같습니다.

Semantics에 의해 let val에서도 함수를 대입할 수 있으니까요.
혹시 다른 수강생분들께서 틀린 부분을 찾으셨다면 알려주세요!


2.
코드:
( ((fn x=>x+1), (fn y=>y and false)).1 , (3,"s").2)


코드:
(1, let val z = 1 in
    (fn x=> fn y=> (x+z;
    y and true))
end)


코드:
 (* tricky WRITE test : func is int->bool, and NOT ERROR *)
 (* answer : ( loc(int -> bool) *)

 let val func = ( fn x=> fn y=> (write x ; write(y); (x=y))  ) 2222 in
     (malloc(func)) end


코드:
(true, fn x=> ((write x); x and true))


위의 네 테스트셋은 error가 되어야 정상인 것 같습니다.

http://ropas.snu.ac.kr/~kwang/4190.310/12/M.pdf에 있는 1.1 Program의 정의에 따르면, 다음의 부분이 있습니다.
인용:
A program is an expression of non-function type: i, s, b, τ loc, or τ × τ' where τ and τ' are non-function types.

이 부분에 따르면
코드:
loc( int -> bool )

혹은
코드:
(bool, bool -> bool)

와 같은 function type을 포함하는 식은 프로그램이 될 수 없으니까요.


2번 부분은 https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3015에서 예전 조교님이 답변하셨던 부분을 보고 유추한 것인데, 이렇게 해석하는 것이 맞는지 궁급하니다.



감사합니다. Smile
위로
사용자 정보 보기 비밀 메시지 보내기
엄태건



가입: 2011년 9월 27일
올린 글: 50

올리기올려짐: 2012년12월5일 12:19    주제: 인용과 함께 답변

음 1번은 다형타입의 함수가 선언되어서 에러를 낸건가요....

조교님께 질문.
1번처럼 다형타입의 함수가 선언되면 반드시 에러를 내야되는 걸까요?

아니면 let val f = (fn x => x) in f 1; f "asdf" end
처럼 다형타입의 함수가 선언되고 이 함수가 다양한 타입의 인자를 받을 때 에러를 내는건가요?
위로
사용자 정보 보기 비밀 메시지 보내기 AIM 주소
이승중



가입: 2010년 6월 22일
올린 글: 561

올리기올려짐: 2012년12월5일 18:45    주제: 인용과 함께 답변

1. 사실 사용하지 않는 값은 미리 걸러내서 없애버린 다음에(최적화를 하고) 타입을 유추하면 되니 반드시 에러를 낼 필요는 없을 것 같습니다. 이 경우에 대한 처리는 각자 구현에 따라 다를 수 있다고 하겠습니다.

하지만 let val f = (fn x=> x) in f 1; f "asdf" end 는 함수 f의 타입을 하나로 확정할 수 없으므로 반드시 에러를 내야합니다.

2. 네 https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3548 꼭지에서 이미 설명 드렸습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2012) 시간대: GMT + 9 시간(한국)
페이지 11

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


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