게시판 인덱스

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

procedure 질문

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



가입: 2017년 9월 5일
올린 글: 24

올리기올려짐: 2017년10월17일 21:39    주제: procedure 질문 인용과 함께 답변

뼈대 코드에 같이 들어있는 test4 예시를 보면
let x:=1 in
let proc inc(n) = x := x + n in
let x:=0 in
(inc (1); write x)
이렇게 되어있는데 LETF에서 env 합집합 {inc |-> <(x,n), ASSIGN(x,x+n),env>}, M |- (let x:=0 in (inc(1);write x)) => v, M' 이런식으로 되는게 맞나요?
오른쪽 e2는 그냥 그대로 썼습니다.

즉, 저기 Proc 에 있는 id_list가 x, n 둘다 포함하는지 n만 포함하는지 궁금합니다.
CALLV를 구현할 때 처음 입력받는 exp_list 의 원소 개수하고 앞서 정의된 proc에 있는 id_list 의 원소 개수가 동일하지 않아 Error "InvalidArg"가 발생해서 질문드립니다.
위로
사용자 정보 보기 비밀 메시지 보내기
신원준



가입: 2017년 9월 12일
올린 글: 23

올리기올려짐: 2017년10월18일 0:35    주제: 인용과 함께 답변

n만 포함합니다.

procedure의 body부분 (LETF 정의상에서 e1부분) 이 ASSIGN 하나라고 적으셨는데 사실 네 개 입니다. (VAR, VAR, ADD, ASSIGN 순으로 eval)

VAR는 rvalue의 x를 가져오고

두 번째 VAR는 rvalue의 n을 가져오고

ADD는 가져온 값, 즉 VAR을 eval한 결과값 둘을 더하고

ASSIGN은 그 결과값, 즉 ADD를 eval한 값을 x에 다시 넣습니다.

이걸 이용하여 질문자께서 사용하신 표현대로 나타내면 다음과 같습니다.

env 합집합 {inc |-> <(n), ASSIGN(x,ADD(VAR(x),VAR(n))),env>}, M |- (let x:=0 in (inc(1);write x)) => v, M'

지난 번 질문과 이어지는 내용이지만, n은 id list에 있고 x에 없는 이유는,

x는 저기 env에 이미 있지만 n은 아직 env에 없기 때문입니다.

함수 호출시점 (CALLV, CALLR) 에 n을 env에 넣어주는 관련된 처리를 해야 하므로, 이를 위해 n을 저장하고 있는 것입니다.

엄밀하게 표현하면 모양새가 좀 다르긴 하겠지만.. 째뜬 이해하시길 바라요
위로
사용자 정보 보기 비밀 메시지 보내기
김현식



가입: 2017년 9월 5일
올린 글: 24

올리기올려짐: 2017년10월18일 9:14    주제: 답변 감사합니다! 인용과 함께 답변

아하! 이제 조굼씩 이해가 되네요. 감사합니다~~

CALLV를 고쳤더니 TEST4는 작동하는데
TEST6에서는 Error Unbound가 떠버리네요...
Error Unbound가 뜨는 경우는 아예 proc 이 앞에 LETF에서
env에 잘 저장이 안됐다는 뜻인데 test4는 잘 작동하니
뭐가 문제인지 모르겠네요...
CALLV를 구현할 때, 사실
sigma, M |- e1=> v1, M1{l1->v1} 하고 sigma'[x1->l1] 이런식으로
재귀적으로 en까지 반복했는데 이 구현이 사실은 주어진 semantics와
많이 다를까요?
감사합니다!
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2017) 시간대: GMT + 9 시간(한국)
페이지 11

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


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