 |
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
안준환
가입: 2010년 9월 2일 올린 글: 12
|
올려짐: 2010년10월14일 21:38 주제: SM5의 동작에 관한 질문 |
|
|
1. 메모리 주소(Loc) 사이의 뺄셈에 대해 스펙 문서와 구현이 다른 것 같습니다. 스펙 문서에는 정수간의 뺄셈 혹은 메모리 주소에서 정수를 빼는 것만 정의되어 있는 반면, 스켈레톤 코드에는 다음과 같은 부분이 있습니다.
코드: | | (V(L(l2,z2))::V(L(l1,z1))::s,_,_,SUB::c,_) -> if l1 = l2 then (V(Z(z1-z2))::s, m, e, c, k)
else raise (RunError (s,m,e,c,k))
|
이 정의가 스펙 문서에 누락된 것인지, 아니면 코드에 문제가 있는 것인지 궁금합니다.
2. 와 에 대한 코드에 조건을 만족하지 못한 경우에 대한 처리가 포함되어 있지 않은 것 같습니다. 마찬가지로 에 대한 구현에서 이 만족되지 않았을 때 오류를 발생시키는 코드가 빠져 있는 것 같습니다.
3. 레코드 사이의 EQ 비교가 잘못 구현된 것 같습니다. 현재 구현은 다음과 같습니다.
코드: | | (V(R r2)::V(R r1)::s,_,_,EQ::c,_) ->
(V(B((fsts r1 = fsts r2) && (rangecheck (fsts r1) r1 r2)))::s, m, e, c, k)
|
여기서 위의 비교 조건은 (fsts r1 = fsts r2)로 인해서 r1 = r2와 동일한 역할을 하게 되는데, 이는 순서에 영향을 받는 비교입니다. 즉, 필드 이름의 순서가 다르면 다른 레코드로 인식하는데, 이는 스펙 문서와 동일하지 않은 것 같습니다. 따라서
코드: | (V (B (List.sort compare r1 = List.sort compare r2)) :: s, m, e, c, k) |
정도로 수정하는 것이 맞지 않을까 하는 것이 제 생각입니다. (아니면 fsts r1 = fsts r2를 빼고 rangecheck를 try ~ with Not_found로 감싸는 방법도 있을 것 같습니다.)
4. box에서 tuple이 묶이는 순서가 뒤바뀐 것 같습니다. 스펙에서는 가 로 묶이는 것으로 되어 있는데 코드는
코드: | let rec box b i s =
if i = 0 then V (R b)::s
else
match s with
(M m::s) -> box (m::b) (z-1) s
| _ -> raise (RunError (s,m,e,c,k))
in (box [] z s,m,e,c,k)
|
와 같이 되어 있어서 R에 주어지는 리스트의 순서가 스택에 들어있던 순서의 역순이 됩니다. (사실 레코드는 순서가 중요하지 않기 때문에 이 부분이 문제가 될 것 같지는 않습니다.)
-----
쓰고 나서 보니 정작 이번 숙제인 K-- 번역기와는 상관이 없는 부분인 것 같습니다...만, 확인 부탁드립니다. 감사합니다. |
|
위로 |
|
 |
조성근
가입: 2009년 9월 14일 올린 글: 283
|
올려짐: 2010년10월15일 1:54 주제: |
|
|
먼저 안준환 님의 꼼꼼함에 감사드립니다.
2. plus와 minus에서의 조건
말씀해주신 내용을 코드에 추가하였습니다. 실행 시 주어진 조건을 만족하지 못하면 예외를 발생시키는 것이 옳습니다.
3. 레코드의 비교
정확한 지적입니다. 이번 숙제와는 관계가 없지만 일단 코드를 수정하여 올려두었습니다.
인용: | (V (B (List.sort compare r1 = List.sort compare r2)) :: s, m, e, c, k) |
매우 깔끔해 보이네요.
1번과 4번은 이번 숙제의 내용과 직접적인 관계가 없습니다. 내일 장수원 조교님과 상의해보고 코드 수정 여부를 결정하도록 하겠습니다.
수정된 코드는
http://ropas.snu.ac.kr/~ta/4190.310/10/skeleton/hw4/sm5.ml
에서 받으시면 됩니다.
감사합니다. |
|
위로 |
|
 |
조성근
가입: 2009년 9월 14일 올린 글: 283
|
올려짐: 2010년10월15일 9:10 주제: |
|
|
1. 이 정의는 스펙 문서에 누락된 내용이 아닙니다. 스펙 문서와 해석기 구현에 차이가 있을 때에는 스펙 문서를 기준으로 숙제를 하시기 바랍니다.
4. 예. 말씀하신 내용이 맞습니다. 묶이는 순서가 스펙 문서에 정의된 것과 반대가 되네요. |
|
위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|