게시판 인덱스

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

1번 문제에 관한 질문

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



가입: 2009년 9월 18일
올린 글: 12

올리기올려짐: 2009년11월16일 2:16    주제: 1번 문제에 관한 질문 인용과 함께 답변

프로그램 종료 조건의 명시가 약간 모호한 면이 있는것 같습니다.

예를 들어 CHOICE 의 경우,

f1 = ADD (NUM 1, VAR)
f2 = ADD (NUM 2, VAR)

라고 했을 시

(exeval 4 (CHOICE (f1, f2)) 라고 할 경우 이는 우선 CHOICE 정의에 따라

(exeval 4 f1) ∪ (exeval 4 f2) 로 해석됩니다.

이를 구하기 위하여 만약 앞부분부터 evaulate 하게 된다면

(exeval 4 f1) 의 결과값은 5, 조건에 합당함
(exeval 4 f2) 의 결과값은 6, 조건에 합당하지 않음. 따라서 현재 가능한 상태값의 집합인 [5]를 리턴

으로 [5]가 리턴되게 되지만 뒷부분부터 evaluate 하게 된다면

(exeval 4 f2) 의 결과값은 6, 조건에 합당하지 않음. 따라서 현재 가능한 상태값 (초기값) 인 [4]를 리턴

으로 다른 결과가 나오게 됩니다.

문제의 정의에 따라 "가능한 모든 state 의 집합" 을 고려하게 되면 [5] 가 리턴되어야 하는게 맞지만, 어느 것을 먼저 evaluate 하느냐에 따라 [4]가 리턴 될 수도 있는 것입니다.

또한 이러한 문제는 내부 구현적으로도 문제가 생길 수 있습니다.

(exeval 2 (SEQUENCE (CHOICE (f1, f2), f2))) 을 실행할 경우, 우선 첫 값이 2이므로 CHOICE (f1, f2) 을 실행하면 문제 없이 [3; 4] 의 집합이 나오게 됩니다.

그런데 뒤의 f2 을 실행할 때, [3; 4] 의 원소중 어느 것을 먼저 실행하느냐에 따라 5 원소가 추가될 수도 있고 아닐 수도 있습니다. (이 역시 문제의 정의를 생각하면 5가 있어야 하는게 맞지만, 종료 조건에 따라 5를 구하지 못하고 6이 먼저 등장함으로써 종료가 되어버리게 됩니다)

특히 명령들이 복잡해지면 사람에 따라 중간 계산 과정인 [3; 4] 가 [4; 3] 으로도 표시될 수 있으며 원소들의 나열 순서에 따라 종료 조건이 다르게 작용할 것입니다.

이러한 부분에 대한 조교님들의 답변을 부탁드립니다. ㅠㅠ

(원소의 갯수가 하나로 유지되면서 값이 변하는 단순한 테스트셋이 들어가지 않을 것 같으니까요)

(제 개인적인 의견으로는 범위에 맞지 않는 (-5~5가 아닌) 계산에 대해서 즉시 프로그램을 종료하기 보다는 그러한 값을 리턴 집합에 포함시키지 않고 나머지 명령들을 그대로 수행했으면 합니다)
위로
사용자 정보 보기 비밀 메시지 보내기
최종욱



가입: 2009년 9월 15일
올린 글: 84

올리기올려짐: 2009년11월16일 2:36    주제: 인용과 함께 답변

(exeval 2 (SEQUENCE (CHOICE (f1, f2), f2))) 을


-> CHOICE(f1, f2) 에서

f1 을 실행하는 경우 : 상태가 3이 됨
그다음 f2 실행 : 상태가 5가 됨


f2 를 실행하는 경우 : 상태가 4가 됨
그 다음 f2 실행 : 상태가 6이 되는데 불가능하므로 4에서 종료


따라서 저 프로그램의 가능한 결과는 [4, 5] 가 되고 실행 순서와는 아무런 관련이 없습니다.

인용:
그런데 뒤의 f2 을 실행할 때, [3; 4] 의 원소중 어느 것을 먼저 실행하느냐에 따라 5 원소가 추가될 수도 있고 아닐 수도 있습니다. (이 역시 문제의 정의를 생각하면 5가 있어야 하는게 맞지만, 종료 조건에 따라 5를 구하지 못하고 6이 먼저 등장함으로써 종료가 되어버리게 됩니다)


이상민님께서 이와 같은 생각을 한 것은, 문제의 핵심을 정확하게 이해하지 못하셔서 약간의 착각을 한 것입니다.

내부 구현을 어떻게 했는지는 모르겠지만 저런 경우에서 예컨대 [3; 4] 가 리스트로 주어졌고, 이에 대해 각각 다음 문장을 실행한다고 했을 때 4를 먼저 실행하면 6이 되어 프로그램이 종료하는 건 맞습니다. 그런데 미라지 언어의 프로그램이 종료하는 것이지 exeval (싹쓸이 실행기)가 종료하는건 아니에요.

그래서 4를 먼저 갖고 실행하나 3을 갖고 실행하나는 아무런 상관이 없습니다. 4에서 6되서 프로그램이 종료되었더라도, 3인 상태에서 실행되는 프로그램은 실행되어야 하죠.
_________________
Jongwook Choi
Seoul National University, School of Computer Science & Engineering
위로
사용자 정보 보기 비밀 메시지 보내기
장수원



가입: 2008년 9월 26일
올린 글: 167

올리기올려짐: 2009년11월16일 11:14    주제: Re: 1번 문제에 관한 질문 인용과 함께 답변

최종욱 수강생께서 명확하게 설명하신 것 같습니다.
lotas123 씀:

예를 들어 CHOICE 의 경우,

f1 = ADD (NUM 1, VAR)
f2 = ADD (NUM 2, VAR)

라고 했을 시

(exeval 4 (CHOICE (f1, f2)) 라고 할 경우 이는 우선 CHOICE 정의에 따라

(exeval 4 f1) ∪ (exeval 4 f2) 로 해석됩니다.

이를 구하기 위하여 만약 앞부분부터 evaulate 하게 된다면

(exeval 4 f1) 의 결과값은 5, 조건에 합당함
(exeval 4 f2) 의 결과값은 6, 조건에 합당하지 않음. 따라서 현재 가능한 상태값의 집합인 [5]를 리턴

으로 [5]가 리턴되게 되지만

뒷부분부터 evaluate 하게 된다면

(exeval 4 f2) 의 결과값은 6, 조건에 합당하지 않음. 따라서 현재 가능한 상태값 (초기값) 인 [4]를 리턴

으로 다른 결과가 나오게 됩니다.

(exeval 4 f2)의 결과 값은 항상 [4]입니다.

미라지 프로그램 자체의 실행순서와 싹슬이의 실행순서를 헷갈리시는 것 같습니다. CHOICE의 의미는 'C1이나 C2 중 하나를 선택해서 실행'하는 것이므로, 초기 상태 4에서 (CHOICE (f1,f2))의 모든 가능한 경우를 실행하면, 5 또는 4가 됩니다(f2가 선택되면 변수가 6이 되면서 범위를 벗어나고, 현재 상태로 실행 종료이므로 4가 됩니다).
인용:

또한 이러한 문제는 내부 구현적으로도 문제가 생길 수 있습니다.

(exeval 2 (SEQUENCE (CHOICE (f1, f2), f2))) 을 실행할 경우, 우선 첫 값이 2이므로 CHOICE (f1, f2) 을 실행하면 문제 없이 [3; 4] 의 집합이 나오게 됩니다.

그런데 뒤의 f2 을 실행할 때, [3; 4] 의 원소중 어느 것을 먼저 실행하느냐에 따라 5 원소가 추가될 수도 있고 아닐 수도 있습니다. (이 역시 문제의 정의를 생각하면 5가 있어야 하는게 맞지만, 종료 조건에 따라 5를 구하지 못하고 6이 먼저 등장함으로써 종료가 되어버리게 됩니다)

특히 명령들이 복잡해지면 사람에 따라 중간 계산 과정인 [3; 4] 가 [4; 3] 으로도 표시될 수 있으며 원소들의 나열 순서에 따라 종료 조건이 다르게 작용할 것입니다.

이러한 부분에 대한 조교님들의 답변을 부탁드립니다. ㅠㅠ

(원소의 갯수가 하나로 유지되면서 값이 변하는 단순한 테스트셋이 들어가지 않을 것 같으니까요)

(제 개인적인 의견으로는 범위에 맞지 않는 (-5~5가 아닌) 계산에 대해서 즉시 프로그램을 종료하기 보다는 그러한 값을 리턴 집합에 포함시키지 않고 나머지 명령들을 그대로 수행했으면 합니다)

이 부분에 대해서는 최종욱 수강생의 답글이 명료하네요. 핵심은 "그런데 미라지 언어의 프로그램이 종료하는 것이지 exeval (싹쓸이 실행기)가 종료하는건 아니에요. "입니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

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


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