이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김찬민
가입: 2010년 9월 6일 올린 글: 81
|
올려짐: 2014년10월7일 23:37 주제: 숙제 3-1: 테스트 케이스 공유 |
|
|
헷갈릴만한 코드나 exception이 나야할 코드나 같이 공유해주셨으면 해요.
저는 하나만 올릴테니 공유 부탁드려요.
코드: | let proc f(f,f,g,g) = if g < 0 then 1 else if not (g < 5) then 2 else f({},unit,g-1,g+(if {} = unit then 1 else (0;g(3)))) in write(f(0,1,2,2/1))
|
결과: 2 |
|
위로 |
|
 |
방정호
가입: 2011년 9월 19일 올린 글: 40
|
올려짐: 2014년10월7일 23:47 주제: |
|
|
테스트셋 감사합니다.
저는 not allowed 가 뜨면서 동작이 안되네요.
그런데 스펙문서에 시멘틱스로는 environment에서
proc의 id랑 그냥 value의 id랑 구분이 없는 것 같은데,
함수 이름이랑 그 scope에 있는 변수가 같은 이름을 갖는 것이 가능한 건가요? |
|
위로 |
|
 |
김찬민
가입: 2010년 9월 6일 올린 글: 81
|
올려짐: 2014년10월7일 23:52 주제: |
|
|
K- 언어 문법 및 의미구조에 나오는 것이 모두 맞고, 충분하다고 가정하면 같은 id를 쓰는 걸 막는 부분이 없다고 생각해서 만든 테스트케이스입니다.
저는 가능하다고 보고 만들었는데, 혹시 결과가 문서랑 안 맞거나 이상한가요? |
|
위로 |
|
 |
방정호
가입: 2011년 9월 19일 올린 글: 40
|
올려짐: 2014년10월8일 0:10 주제: |
|
|
잘 모르겠네요.
조교님이 답변을 해주셔야 될 것 같습니다.
저도 제 구현에서 이 코드가 어떻게 작동할지는 좀 더 살펴봐야 겠지만,
f라는 이름이 함수, 변수 중 하나로 바인딩이 되버려서 어딘가에서 not allowed(hw3.ml에 기본적으로 있던 에러)가 나오는 것 같네요.
방정호 가 2014년10월8일 14:18에 수정함, 총 1 번 수정됨 |
|
위로 |
|
 |
김용기
가입: 2014년 9월 30일 올린 글: 11
|
올려짐: 2014년10월8일 14:05 주제: |
|
|
김찬민님 말씀대로 semantics를 보면 적법한 코드로 보입니다.
저도 동일하게 2가 결과로 나오고요...
K- 언어의 의미 정의를 보면 함수 호출 시 환경에 파라메터를 바인딩 하는 순서는
1. 파라메터 id를 왼쪽 -> 오른쪽으로 바인딩 (덮어쓰기 가능)
2. 가장 마지막에, 함수 이름을 환경에 바인딩(함수명은 항상 함수로 바인딩됨)
따라서 let proc f(f,f,g,g) 의 경우 f 로 넘어온 인자는 함수 바인딩 f에 의해 항상 덮어 씌워 지므로 사용할 수 없는 의미 없는 인자로 보입니다.
 |
|
위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2014년10월8일 16:53 주제: |
|
|
주어진 문서의 스펙을 그대로 따라간다면 대로 정상적으로 실행되어야 합니다.
그 구체적인 원리는 김용기 씨가 말씀하신 것이 맞고요.
하지만 조교 팀에서 내부적으로 논의한 결과, 그러한 코너 케이스는 테스트하지 않는 것으로 결정하였습니다. 이는, 그러한 코너 케이스를 허용하는 것이 언어에 있어 큰 유용함을 제공해 주지는 않는다고 판단했기 때문입니다.
즉, 테스트케이스에서 한 함수의 매개변수들은 모두 서로 다른 이름을 갖고, 그 이름들은 해당 함수의 이름과 중복되지 않는 것으로 정하겠습니다.
이러한 테스트케이스를 사용하지는 않겠습니다만, 왜 정상적으로 실행되지 않는지 그 원인은 파악해 보시는 것은 의미있을 것입니다. (혹시 semantics를 잘못 이해하고 있지 않았는지 검증하는 차원에서)
강동옥 가 2014년10월9일 12:22에 수정함, 총 1 번 수정됨 |
|
위로 |
|
 |
방정호
가입: 2011년 9월 19일 올린 글: 40
|
올려짐: 2014년10월8일 16:58 주제: |
|
|
제 코드를 보니 CALLV 구현에 문제가 있었던 것 같습니다.
테스트케이스랑 답변 모두 감사드립니다. |
|
위로 |
|
 |
|