| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
한재화 손님
|
올려짐: 2007년10월4일 16:49 주제: 이번 숙제의 value의 타입중에, Bot 타입은 무언가요? |
|
|
수업시간에는 Z,B,Addr, Unit 을 배운거 같았는데,
value의 구성요소 중에 Bot 이라는게 있네요. 무언지 몰라서 질문합니다.  |
|
| 위로 |
|
 |
정영범
가입: 2005년 9월 5일 올린 글: 167
|
올려짐: 2007년10월5일 0:31 주제: |
|
|
Bot(Bottom) 말 그대로는 가장 아래에 있다는 뜻입니다.
어디에서 아래에 있는 것인가 하면 값들이 돌아다니는 공간에서 제일 아래에 있다라는 거죠.
정의되지 않은 값/ 잘못된 값/끝나지 않는 함수의 값을 나타내기 위해 사용됩니다.
우리가 프로그램 식의 값을 정의할 때
whlie(e1){e2};
의 값을 e1의 값이 거짓일때 e2의 마지막 subexpression이라고 정의할 수 있겠지요.
그렇게 정의했을때 만약 아래와 같은 프로그램에서 y의 값이 무엇이겠는가 할 때
x=1;
y=while(x>0){x++;}
y의 값을 정의 할 수 없으니까 편하게 쓰려고 정의한 값이 bottom입니다. |
|
| 위로 |
|
 |
한재화 손님
|
올려짐: 2007년10월5일 18:04 주제: 그럼, while문의 실행값은 마지막실행된 문장의 값인가요? |
|
|
가 결국에는, E1이 거짓일때 마지막으로 계산된 E2 값을 내놔야 한다는건가요..
교재에는 unit 값을 내놔야 한다고 써있습니다. 그리고 Unit 과 Bot 의 차이점도 명확히 모르겠네요..  |
|
| 위로 |
|
 |
정영범
가입: 2005년 9월 5일 올린 글: 167
|
올려짐: 2007년10월5일 18:23 주제: |
|
|
| 인용: | | 결국에는, E1이 거짓일때 마지막으로 계산된 E2 값을 내놔야 한다는건가요.. |
교재에 나와있다고 꼭 그래야 한다는 보장은 없습니다. 언어의 의미는 정의하기 나름입니다.
x:=1; y:= x + 1;
를 실행하면 y값이 2가 된다는 것은 언어의 의미를 정의할 때 보장 받는 것이지 절대적인 것이 아닙니다. 숙제에서 인터프리터를 짜면 느끼겠지만 우리가 어떻게 해석하냐에 따라서 언어의 의미가 결정됩니다. 식 x:=n; 의 의미를 n이 정수일때 x-> n+1로 메모리를 변화시키는 것이라고 해석할 수도 있습니다. 어거지일 뿐이지만요. 인터프리터를 맘대로 짜면 프로그램을 몇번 짜보는 것으로는 도저히 이해할 수 없는 언어도 만들 수 있겠지요. 항상 직관적인 것이 승리하는 것 같습니다.
제가 위에서 whlie문의 return 값을 예로 든 것은 프로그램이 무한히 돌 경우에 return 값은 정의가 안된다는 의미었습니다.
unit 값은 값입니다. 값에 다른 정보가 없는 값이죠.
그런데, 무한히 도는 프로그램은 아무런 값도 내지 않습니다. 정의할 수 없는 것이죠.
print_string () : unit -> unit
f(int x){ f(x)}; int -> ???
???은 unit 타입이 될 수 없습니다. |
|
| 위로 |
|
 |
|