진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월1일 2:09 주제: |
|
|
- 질문
1. pgm -> ( pgm -> 메모리 셋) ?= pgm -> pgm -> 메모리 셋
2. 1의 답이 아니오 라면 왼쪽 거 어떻게 정의해요?
3. eval pgm 하면 pgm-> 메모리셋 이 나오고
eval pgm pgm 하면 메모리셋이 나와야 하는 거죠?
- 답변
functional programming language(nML포함) 에서는 -> 의
associativity가 오른쪽입니다.
따라서 pgm -> (pgm -> 메로리 셋) = pgm -> pgm -> 메모리 셋
입니다. 그리고 주어진 pgm의 각 command도 하나의 pgm이 됩니다.
그래서 위의 함수 정의는 전체 프로그램을 주면, 전체 프로그램의
각 command(이것도 하나의 pgm)을 입력받아
그 command가 실행되기 직전의 memory
를 돌려주는 함수가 됩니다.
위의 답변은 일반적인 이야기이고 수업시간에도 교수님이 언급하셨듯이
pgm -> ( pgm -> 메모리 셋)의 정의의 추상적인 것입니다.
숙제에서 요구하는 것은 pgm을 넣으면 결과가 나오는데
그 결과가 각 command에 해당하는 momory set 정보를 가지고 있으면
됩니다. 이 결과는 개념적으로는 pgm -> memory set 인 함수이나
그냥 table처럼 구현하셔도 상관없습니다.
구현시에는 어떤 type을 사용해도
상관없습니다. 아마 nML library중 map을 사용하시면 편하실 것 입니다.
map을 사용한다면 실제 프로그램에서 eval 의 type은
pgm -> Map 의 형태가 될 것입니다. 이 때 map의 key는 pgm의 각 command
가 될 것이고 해당 key의 값이 memory set 이 될 것입니다. 이 때 key 로
쓰이는 command는 abstract tree상에서 다른 곳에 있으나 같은 형태를
같는 command일 수 있습니다.(ex x := 1; x := 1) 이런 경우, 각 command
를 구별할 수 있는 방법을 고안하시면 될 것입니다.
또한 위에서 얘기한 방법이외에도 다양하게 구현 하실 수 있을 것 입니다. |
|