 |
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박준호
가입: 2012년 9월 15일 올린 글: 71
|
올려짐: 2013년10월4일 19:45 주제: 3-1 질문입니다. |
|
|
0. READ
semantics의 n은 read_int로 받아오면 되나요?
1. WRITE
print_int와 print_newline을 사용해야 할 것 같은데,
semantics에서 v가 아니라 n 이어야 할 것 같은데, 맞나요??
2. CALLV
sigma' {x1->l1}...{xn->ln}{f-><(x1~xn),e',sigma'>}, Mn{...}
에서, f-> 안에 들어가는 sigma' 는 {xi->li}(i=1~n) 으로 환경변수가 바뀐 sigma'
인가요, 아니면, 우측에서 sigma(f)에 저장되어있던 sigma' 그대로인가요?
semantics 정의대로라면 후자인 것 같은데..
3. "K.run(K.emptyMemory, K.emptyEnv, S)는 프로그램 S를 실행시키게 되는데, 성공적으로 끝나면 최후의 값을 내어주게 됩니다." 라고 되어있는데,
./run examples test1.k- 를 보면, write x+y로 되어있어서
3이 출력되지만, write의 semantics를 보면, 출력하는 값을 리턴하기도 합니다.
다른것도 돌려보면, 최후의 값을 출력하지는 않는 것 같은데, 출력하게 해주어야 하나요???
그렇게 되면 (*implement it!*) 부분이 아니라,
let run (mem, env, pgm) =
let (v,_) = semantics mem env pgm in
print_value v;
v
같이 해주어야 할 것 같습니다.
4. CALLV나 CALLF RECT 등에서 N개의 엘리먼트 페어를 이용하는경우가 많은데, 서로의 리스트들의 길이가 다르게 될 경우 exception 처리는 어떻게 해주어야 하나요???
(ex : CALLV에서 f(e1~en), env(f) = <(x1~xm) e' env'> 에서, f의 argument로 넘겨주는것과 정의할 때 x1~xm을 하는건 서로 다른부분에서 하는거라 넘겨주는argument 길이가 차이가 나는 경우)
5. RECF는 빈 레코드를 넣는 경우인가요? |
|
위로 |
|
 |
최준원
가입: 2007년 3월 30일 올린 글: 149
|
올려짐: 2013년10월4일 21:39 주제: |
|
|
인용: | 0. READ
semantics의 n은 read_int로 받아오면 되나요? |
네, 맞습니다
(스펙 정리 게시물에 추가)
인용: | 1. WRITE
print_int와 print_newline을 사용해야 할 것 같은데,
semantics에서 v가 아니라 n 이어야 할 것 같은데, 맞나요?? |
print_int 는 사용하시는 것이 맞지만, print_newline 은 사용하시면 안됩니다.
정의 그대로 write e 는 e 를 계산한 값만 출력합니다.
(스펙 정리 게시물에 추가)
인용: | 2. CALLV
sigma' {x1->l1}...{xn->ln}{f-><(x1~xn),e',sigma'>}, Mn{...}
에서, f-> 안에 들어가는 sigma' 는 {xi->li}(i=1~n) 으로 환경변수가 바뀐 sigma'
인가요, 아니면, 우측에서 sigma(f)에 저장되어있던 sigma' 그대로인가요?
semantics 정의대로라면 후자인 것 같은데.. |
semantics 문서에 있는 정의 그대로입니다.
sigma' 의 정체는 sigma(f) = <...> 에서 확인할 수 있습니다.
(그래도 sigma' 가 무엇인지 헷갈리시면 LETF semantics 를 잘 살펴봐 주세요)
참고로, sigma'{x1->l1} 는 현재 sigma' 환경에 x1->l1 을 추가한 환경을 의미합니다.
인용: | 3. "K.run(K.emptyMemory, K.emptyEnv, S)는 프로그램 S를 실행시키게 되는데, 성공적으로 끝나면 최후의 값을 내어주게 됩니다." 라고 되어있는데,
./run examples test1.k- 를 보면, write x+y로 되어있어서
3이 출력되지만, write의 semantics를 보면, 출력하는 값을 리턴하기도 합니다.
다른것도 돌려보면, 최후의 값을 출력하지는 않는 것 같은데, 출력하게 해주어야 하나요??? |
출력하시면 안됩니다.
입력/출력은 read/write 로만 이루어집니다.
(스펙 정리 게시물에 추가)
인용: | 4. CALLV나 CALLF RECT 등에서 N개의 엘리먼트 페어를 이용하는경우가 많은데, 서로의 리스트들의 길이가 다르게 될 경우 exception 처리는 어떻게 해주어야 하나요??? |
어떤 예외든 내 주시고 처리는 따로 안해주셔도 됩니다.
OCaml 표준 예외 중 하나인 Invalid_argument 예외를 내 주실 것을 권장합니다.
(스펙 정리 게시물에 추가)
인용: | 5. RECF는 빈 레코드를 넣는 경우인가요? |
네, 맞습니다.
도움이 되셨기를 바랍니다  |
|
위로 |
|
 |
김남현
가입: 2012년 9월 14일 올린 글: 19
|
올려짐: 2013년10월11일 13:30 주제: |
|
|
1. 질문처럼 WRITE의 semantics는 v를 결과로 내놓는데, 스펙 정리 게시물에는 print_int를 쓰라고 되어있습니다.
그러면 WRITE의 결과는 v로 내놓으나, n인 경우에 한해서 화면에 출력하라는 것인가요?
아니면 WRITE의 결과는 n만 나올 수 있는 것인가요?(즉, 나머지 경우에는 print_int가 내는 exception을 그냥 사용하나요?) |
|
위로 |
|
 |
최준원
가입: 2007년 3월 30일 올린 글: 149
|
올려짐: 2013년10월11일 13:34 주제: |
|
|
인용: | 그러면 WRITE의 결과는 v로 내놓으나, n인 경우에 한해서 화면에 출력하라는 것인가요? |
네, 정수에 대해서만 출력하시면 됩니다.
나머지 경우에는 예외를 내시면 되고요.
예외는 정리 게시물에도 있지만 Error 예외를 쓰시기를 권장합니다. |
|
위로 |
|
 |
최준원
가입: 2007년 3월 30일 올린 글: 149
|
올려짐: 2013년10월11일 13:38 주제: |
|
|
그리고 의미 문서의 WRITE 부분에서,
e => v 는 e => n 으로, write e => v 는 write e => n 으로 생각해 주시면 됩니다
(스펙 정리 게시물에 추가) |
|
위로 |
|
 |
방인혁
가입: 2012년 9월 13일 올린 글: 18
|
올려짐: 2013년10월11일 14:09 주제: |
|
|
그러니까 write를 여러 번 사용해서 숫자가 여러 개 출력될 경우 그 숫자들이 그냥 한 줄에 쭉 나열되면 되는건가요?
예를 들어 피보나치 수열이면
112358 이렇게요? |
|
위로 |
|
 |
최준원
가입: 2007년 3월 30일 올린 글: 149
|
올려짐: 2013년10월11일 14:12 주제: |
|
|
인용: | 그러니까 write를 여러 번 사용해서 숫자가 여러 개 출력될 경우 그 숫자들이 그냥 한 줄에 쭉 나열되면 되는건가요? |
네, 맞습니다. |
|
위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|