박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년9월28일 14:26 주제: [필독]숙제 2-2에 관련된 논의들에 대한 정리 |
|
|
숙제 마감이 10시간 안으로 다가왔음에도 불구하고,
k-의 의미구조가 아직 정확히 정리되지 않은 면들이 많은 것 같아 안타깝습니다.
숙제 3.부터는 정확한 의미구조를 제공하여드리도록 하겠습니다.
expression(이하 E)와 statement(이하 S)에 대해서 정리해드리겠습니다.
강의시간에는 프로그램이란 S라고 정의했습니다. 그리고 E는 단지 S의 부품으로 사용될 뿐이었죠.
따라서 E는 계산되면 값을 리턴하고, S는 계산되면 메모리를 리턴하는 것으로 정의했습니다.
(즉, 1+1은 프로그램이 아니라는 것입니다.)
하지만, 이번 숙제에서 정의된 프로그램은 그렇지 않습니다.
숙제 명세에 명시되어 있듯이, 프로그램은 E or S입니다.
(즉, 1+1도 프로그램입니다.)
그런데, E는 값을 리턴하는 것이 자연스럽고, S는 메모리를 리턴하는 것이 자연스러울 것입니다.
따라서, E이거나 S인 프로그램은 값과 메모리를 모두 같이 리턴하는 것이 자연스러울 것입니다.
즉, E를 계산하면 "값"과 "계산전메모리"를 리턴하고,
S를 계산하면 "값"과 "메모리"를 리턴하는 것입니다.
이럴 경우, S의 값을 어떤 식으로 정의하는지에 대한 문제가 발생합니다.
이것은 정의하는 사람의 자유입니다.
예를 들어,
1. 모든 S는 unit을 리턴한다.
2. let x=e1 in e2는 e2의 계산값을 리턴하고, 나머지 S는 모두 unit을 리턴한다.
위와 같이 어떤식으로 정의하셔도 상관없지만,
성냥개비가져가기 게임을 해보시려면 적어도 2.와 같이 하셔야 겠지요.
단, 구현방법에 무관하도록 채점할 것이니, 적절히 정의하셔서 구현하시기 바랍니다.
지금까지 언급한 확장부분을 제외한 다른 모든 부분은 강의시간에 배우셨던 그래도 하시면 됩니다.
예를 들어, 변수 바인딩이나 assign과 같은 것들의 의미들도 강의 슬라이드에 나온 것을 토대로하시기 바랍니다.
또한 이 글에 언급된 약간의 확장에 대해서는 다음 강의 슬라이드에서 더 구체적이고 포괄적으로 다루게 될 것입니다.
따라서 현재 구현하시면서 발생하는 모든 궁금점들은 다음 강의 후에 명확히 해결이 될 것이지만, 미리 예습차원에서 어떻게 해결하는 것이 좋을지 생각해보시는 것도 좋습니다.
다만, E와 S의 혼용에 따라 발생하는 side-effect와 같은 문제들에 무관하도록 채점할 것이니, 너무 완벽하게 구현하시려다 딜레이까지하시는 불상사는 없길 바랍니다. |
|