윤형석
가입: 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. |
이 부분에 따르면
혹은
와 같은 function type을 포함하는 식은 프로그램이 될 수 없으니까요.
2번 부분은 https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3015에서 예전 조교님이 답변하셨던 부분을 보고 유추한 것인데, 이렇게 해석하는 것이 맞는지 궁급하니다.
감사합니다. |
|