 |
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2005년10월26일 22:59 주제: 숙제 4-3. 설탕물 질문 |
|
|
다음 프로그램이 올바른 것인가요?
코드: |
3 let procedure f(x) =
4 for x := 3 to 7
5 do
6 write 1
7 end
8 in
9 let
10 y := 0
11 in
12 call f<y> ;
13 write y
14 end
15 end
|
결과값은 다음과 같은데요.
즉, for 문에서 x 가 함수의 인자와 같기 때문에 바인딩이 되어 있어서, 위와 같은 결과가 나오게 됩니다.
그런데, 위의 프로그램이 잘 수행되긴 하지만, 자연스러운 의미를 보자면,
for 문에서의 x 는 let 에서 선언된 후에 사용되어야 하는 것 같습니다.
즉,
코드: |
2 let procedure f(x) =
3 let x := 1 in
4 for x := 3 to 7
5 do
6 write 1
7 end
8 end
9 in
10 let
11 y := 0
12 in
13 call f<y> ;
14 write y
15 end
16 end
|
위와 같이 let 에 의해서 묶여져야 되지 않을까요?
이러한 질문의 요지는..
함수 정의 부분에서, for 문을 사용할 때, 저렇게 let 으로 묶지 않고, 첫번째 코드처럼 사용할 수 있다면,
f<y> 를 녹이는 게 너무 어렵다는 것입니다. ㅠ.ㅠ
다음과 같이 f<y> 를 녹이려고 했는데요..
코드: |
17 let procedure f(x) =
18 for (x + 0) := 3 to 7
19 do
20 write 1
21 end
22 in
23 let
24 y := 0
25 in
26 call f(&y) ;
27 write y
28 end
29 end
|
for 문에서는 18 번째 줄의 (x + 0) 자리에 x 라는 Id 만 허용되어 있어서, 위와 같은 방법을 사용하지 못하겠더군요.
그래서 for 문을 while loop 으로도 바꾸어보고,
let 을 사용해서 변수를 치환해보기도 했는데,
모든 경우를 간단히 cover 할 수 있는 방법이 떠오르지 않더군요.
read x 와 같은 구문에서도 비슷한 상황이 발생합니다.
즉, 제 질문의 요지는..
함수 정의할 때, 인자가
for 문에서 x 라는 Id 와,
read x 문에서 x 라는 Id 로 사용될 수 있느냐는 것입니다.
사용될 수 있다면, 설탕 녹이기가 참 힘든 것 같습니다.
덧,
혹시라도, 첫번째 코드의 f<y> 를 자연스럽게 녹이는 방법을 아시는 분께서는 무지한 저에게 자그마한 깨달음을 주셨으면 합니다. |
|
위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2005년10월26일 23:58 주제: |
|
|
아, 그리고..
숙제 4.3 은 어떻게 제출하나요?
dissolveCbr 구현 코드를 어디에 적어서 내야하는지요?
일단 이번 숙제 4.1 에서 작성한 "1.n" 코드에
StagedK structure 속의
fun eval _ _ _ 정의하고나서
fun dissolveCbr pgm 을 정의한다음
코드: |
1052 in
1053 fst (eval environ mem pgm) ;
1054 fst (eval environ mem (dissolveCbr pgm))
1055 end
1056 end
|
"1.n" 맨 마지막 부분을 위와 같이 수정해서,
설탕이 있는 프로그램과 설탕이 녹은 프로그램 두개를 동시에 실행하도록 했는데,
이렇게 하면 되는 건가요?
아니면 숙제 3.1 의 K structure 에 넣어야 하나요? |
|
위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2005년10월27일 14:09 주제: |
|
|
이 질문에 답변 부탁드립니다. |
|
위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
올려짐: 2005년10월27일 18:06 주제: Re: 숙제 4-3. 설탕물 질문 |
|
|
박대준 씀: |
함수 정의할 때, 인자가
for 문에서 x 라는 Id 와,
read x 문에서 x 라는 Id 로 사용될 수 있느냐는 것입니다.
|
항상 함수 몸체를 변수 선언 구문(let)으로 한꺼풀 감싸고 변수를 인자로 초기화는 방안은 어떨까요?
박대준 씀: |
사용될 수 있다면, 설탕 녹이기가 참 힘든 것 같습니다.
|
교수님께서 이 문제는 원래 도전과제로 내려던 것을 약간 쉽게 고쳐서 출제하신 것이라고 합니다. 문제가 어려운 게 정상입니다.
@ 쉽게 대답할 수 있는 질문에 먼저 대답하다 보니, 대답하는 순서가 질문 순서와 다를 수가 있습니다. 그래도, 조교가 놓치는 일은 거의 없으니 불안해하지 마시기 바랍니다.  |
|
위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2005년10월27일 23:46 주제: Re: 숙제 4-3. 설탕물 질문 |
|
|
김덕환 씀: | 박대준 씀: |
함수 정의할 때, 인자가
for 문에서 x 라는 Id 와,
read x 문에서 x 라는 Id 로 사용될 수 있느냐는 것입니다.
|
항상 함수 몸체를 변수 선언 구문(let)으로 한꺼풀 감싸고 변수를 인자로 초기화는 방안은 어떨까요?
|
조교님의 대답을 다음과 같이 해석해도 되나요?
함수 선언부분 (즉, LETF (f, x, e1, e2) 에서 e1 부분) 에서
for 문 ( FOR (x, e1, e2 ,e3) ) 이나 read 문 ( READ x ) 을 사용할 때는,
사용전에, 항상 x 를 let 으로 선언해준다고 가정한 후, 문제를 풀어라.
즉, 아래의 두 코드는 있을 수 없다고 가정하라.
코드: |
3 let procedure f(x) =
4 for x := 3 to 7
5 do
6 write 1
7 end
8 in
9 let
10 y := 0
11 in
12 call f<y> ;
13 write y
14 end
15 end
|
코드: |
53 let procedure f(x) =
54 read x
55 in
56 let x := 0 in
57 call f<x> ;
58 write x
59 end
60 end
|
제가 조교님의 말뜻을 제대로 해석한것인가요? |
|
위로 |
|
 |
김진현

가입: 2005년 9월 20일 올린 글: 91 위치: SNUCSE OPT. lab.
|
올려짐: 2005년10월28일 2:37 주제: |
|
|
제 생각에 조교님께서 말씀하시는 건 설탕을 녹인 결과물에 대한 이야기였던 것 같습니다.
그러니까, 녹이는 방법에 대한 조언이셨던 것 같고,
녹일 대상의 속성 규명은 아니셨던 것 같습니다.
덧. for 가 제일 어려워요 ㅜㅜ _________________ The kingdom of heaven has been forcefully advancing, and forceful men lay hold of it. |
|
위로 |
|
 |
박소영 손님
|
올려짐: 2005년10월28일 10:04 주제: Re: 숙제 4-3. 설탕물 질문 |
|
|
박대준 씀: | 김덕환 씀: | 박대준 씀: |
함수 정의할 때, 인자가
for 문에서 x 라는 Id 와,
read x 문에서 x 라는 Id 로 사용될 수 있느냐는 것입니다.
|
항상 함수 몸체를 변수 선언 구문(let)으로 한꺼풀 감싸고 변수를 인자로 초기화는 방안은 어떨까요?
|
조교님의 대답을 다음과 같이 해석해도 되나요?
함수 선언부분 (즉, LETF (f, x, e1, e2) 에서 e1 부분) 에서
for 문 ( FOR (x, e1, e2 ,e3) ) 이나 read 문 ( READ x ) 을 사용할 때는,
사용전에, 항상 x 를 let 으로 선언해준다고 가정한 후, 문제를 풀어라.
즉, 아래의 두 코드는 있을 수 없다고 가정하라.
코드: |
3 let procedure f(x) =
4 for x := 3 to 7
5 do
6 write 1
7 end
8 in
9 let
10 y := 0
11 in
12 call f<y> ;
13 write y
14 end
15 end
|
코드: |
53 let procedure f(x) =
54 read x
55 in
56 let x := 0 in
57 call f<x> ;
58 write x
59 end
60 end
|
제가 조교님의 말뜻을 제대로 해석한것인가요? |
음 조교님 말씀대로.. for 밖에를 let으로 감싸고 나면
첫번째 code를 그냥 돌린거랑, 설탕으로 돌린거랑 값이 달라져요-
설탕 돌릴 때는 let으로 감싸고 하니까 당연한 건가요?
아니면 제가 잘 못한 건가요-_-? |
|
위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
올려짐: 2005년10월28일 11:42 주제: Re: 숙제 4-3. 설탕물 질문 |
|
|
박대준 씀: |
함수 선언부분 (즉, LETF (f, x, e1, e2) 에서 e1 부분) 에서
for 문 ( FOR (x, e1, e2 ,e3) ) 이나 read 문 ( READ x ) 을 사용할 때는,
사용전에, 항상 x 를 let 으로 선언해준다고 가정한 후, 문제를 풀어라.
|
진현 님 말처럼 그런 경우를 해결하기 위해 교수님께서 제시해주신 하나의 방안입니다.
See also https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=170 |
|
위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|