게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

과제 2-2에 대한 몇가지 질문

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2006)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최원태



가입: 2006년 9월 16일
올린 글: 369

올리기올려짐: 2006년9월27일 22:31    주제: 과제 2-2에 대한 몇가지 질문 인용과 함께 답변

1.
expression으로 분류할 수 있는 입력값은 각각 자명한 타입의 값을 반환하도록 하면 될 것 같고 read, write는 unit을 반환하면 될 것 같습니다.

그런데 command계열의 경우에는 어떤 값을 리턴하게 해야 합니까?
memory를 리턴하게 하면 회종실행 결과가 조금 이상해 질 것 같고.
(int a = 3을 실행했다고 3이들어있는 메모리스택을 리턴하는 프로그램이 있다는 이야기는 들어본적이 없으니까요) 그렇다고 unit을 리턴하게 하면 다른 function으로 처리한 다음에 마지막에 memory타입을 unit으로 바꿔치는 깔끔하지 못한 짓을 해야 할 것으로 보입니다. 어느쪽으로 처리하는 것이 좋겠습니까?

2.read가 터미널로부터 값을 읽어오는 것이고 write는 터미널에 값을 출력하는 것으로 하면 될까요?

3.Assign과 Let에 대한 질문입니다.
Let의 경우에는 메모리에 공간을 만들고 Env에서 Identifier와 값을 물려주면 될 것 같습니다. Assign의 경우에도 이처럼 메모리를 잡고 값을 넣어 주어야 하는지, 아니면 메모리가 Let등에 의해서 이미 선언된 경우에만 넣어주고 다른 경우에는 에러를 내야 하는지 궁금합니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
최원태



가입: 2006년 9월 16일
올린 글: 369

올리기올려짐: 2006년9월27일 22:56    주제: 추가적인 질문 인용과 함께 답변

4.강의록에는 Expression과 Statement를 구분하고 있습니다.

한가지 예로
MㅏE is true
MㅏS is M1
---------------------
Mㅏif E then S1 else S2 is M1
같은 식으로 E와 S를 구분해서 사용하고 있습니다.
E는 절대로 메모리를 변경시키지 않는다는 가정을 깔고 있지요.
그런데 E의 자리에 들어가는 녀석이 Memory를 변경할 가능성도 있지 않나요?
아니면 E는 내부적으로 E만 가지고 놀기 때문에 절대로 메모리를 변경하지 않는다고 가정해도 될까요?
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2006년9월28일 5:23    주제: 인용과 함께 답변

제 생각에는

1. 어차피 내부 함수로 구현해야 합니다. 함수를 2개 돌리건, 하나의 내부 함수를 두고 리턴값을 튜플로 두건 말이죠. 주어진 run만 가지고는 구현이 안됩니다. 이 내부함수들을 통해 eval한 값들을 run이 처리하도록 하면 되겠죠. run은 최종적으로는 unit이 아니라 Unit 타입을 반환해야 (가져야)겠죠.

2. 그렇다고 생각합니다.

3. 강의노트의 semantics를 보면, 결론에서는 단순히 할당문을 받아 메모리가 MㅏM[v/e(x)]이런 식으로 변해야 한다는 것을 말할 뿐이죠. 전제들을 봐도 단지 E가 값을 evaluate하기만 하면 됩니다.

그런데 만약 환경 e에서 e(x)가 정의되어 있지 않다면, 즉 바인딩 되어 있지 않다면 M[v/e(x)] 자체가 정의가 안 되죠. 그러니 결국 이미 선언된 변수에 대해서만 할당이 가능하겠죠.

하지만 메모리는 할당이 되지 않은 경우라도 semantics 정의 상으론 아무 문제가 없습니다. 즉 변수 바인딩은 되어있는데 메모리 얼로케이션은 되어 있지 않는 경우에는 할당문이 작동해야겠죠. 그런데 변수 바인딩 자체가 언제나 LET을 통해서만 이루어지므로(즉 변수 바인딩 후엔 언제나 메모리 얼로케이션이 일어나므로) 그런 경우는 존재하지 않겠지요.

제 생각엔 semantics가 좀 애매한 것 같습니다. 전제부분에서 e(x)의 정의 여부를 따지든지 해야 한다고 생각합니다.

4. 전제를 보면 eval(E)는 T나 F여야 하죠. 그런데 역시 우리의 semantcs 정의들을 보면, T나 F를 value로 산출하면서 동시에 메모리를 변화시키는 경우는 없습니다. 따라서 E는 메모리를 변화시킬 수 없습니다.........라고 생각했습니다만, SEQ(e1,e2)같은 게 if문 조건절에 들어오면, e1에 의해 메모리가 바뀔 수도 있겠네요. 이런 경우는 어떻게 처리해야할까요. 그냥 놔두면

코드:
IF2(E, S1, S2)
여기서 E1 = SEQ(E1,E2)인 경우
코드:
SEQ(E1,IF2(E2,S1,S2))
이것처럼 동작할 텐데요..

장민석 가 2006년9월28일 7:05에 수정함, 총 2 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
김지훈



가입: 2006년 9월 12일
올린 글: 11

올리기올려짐: 2006년9월28일 6:21    주제: 인용과 함께 답변

4. 해당하는 자리에 필요한 값이 '최종적으로' 리턴 되면 문제없다고 봅니다.
이를테면, 밑에 다른분이 질문하신 것과 같이 성냥개비 게임의 경우, while문의 조건절 안에 SEQ로 WRITE등 다양한 작업을 수행하고 있습니다.
하지만 SEQ의 마지막에는 bool 을 리턴하기에 동작하는 데는 무리가 없다고 생각됩니다.
위로
사용자 정보 보기 비밀 메시지 보내기
김지훈



가입: 2006년 9월 12일
올린 글: 11

올리기올려짐: 2006년9월28일 6:23    주제: 인용과 함께 답변

IF 문의 경우에서도 첫 exp 자리에는 bool 값이 필요하기 때문에 SEQ(E1,E2) 의 경우 E2가 bool 이면 IF( SEQ(E1,E2), S1,S2 )의 형태로 그대로 실행을 할 것이고 E1에 의해 입출력, 혹은 메모리의 변화가 생길 수도 있다고 생각됩니다.
위로
사용자 정보 보기 비밀 메시지 보내기
박대준



가입: 2005년 10월 7일
올린 글: 245

올리기올려짐: 2006년9월28일 14:51    주제: 인용과 함께 답변

if e s s에서 e를 계산하는 도중 발생하는 side-effect(메모리 변화)까지 잘
포섭하는 방법을 아직 배우지 않았기 때문에, 그런일은 일어나지 않는다고
가정하시고 구현하셔도 무방합니다.
단, 개인적인 호기심으로 어떻게 하면 그런 것들까지 잘 해결할 수 있을지
생각해보시는 것도 좋을 듯 합니다.
아래 글의 아랫부분을 읽어보시기 바랍니다.
https://ropas.snu.ac.kr/phpbb/viewtopic.php?p=1763#1763
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2006) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay