이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
이중호
가입: 2009년 9월 19일 올린 글: 35
|
올려짐: 2009년11월24일 1:28 주제: expansive 질문입니다 |
|
|
교재 189쪽에 보면 expansive(E1 E2) = true라고 돼 있는데
이해가 안됩니다
expansive(E1) or expansive(E2)가 아닐런지,,, |
|
위로 |
|
|
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년11월24일 20:28 주제: |
|
|
글쎄 저도 잘 이해가 안가네요.
교수님께 여쭤보겠습니다.
true라고 해도 안전성을 해치지는 않으니 제출은 그렇게 하셔도 됩니다. |
|
위로 |
|
|
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년11월24일 21:58 주제: |
|
|
아직 교수님께 여쭤보지는 않았지만..
제가 찾아본 결과를 말씀드리죠.
http://www.lfcs.inf.ed.ac.uk/reports/88/ECS-LFCS-88-54/ECS-LFCS-88-54.pdf
위 논문은 side effect가 있는 언어의 타입 일반화에서 나오는 문제와 그 해결책을 제시한 Tofte라는 사람의 박사 논문입니다. expansive에 대한 설명도 나와있습니다.
함수 적용(APP) 가 왜 expansive 이냐면,
부분 적용(partial evaluation) 시 문제가 되기 때문입니다.
저 논문에 있는 예제를 우리가 익숙한 형태로 옮겨보죠.
코드: |
let mk_sham_id = fun x ->
let own = ref x
in (fun y -> let temp = !own in (own:= y; temp))
in
let sham_id = mk_sham_id nil in
sham_id [true];
List.hd (sham_id [1]) + 1
|
이처럼 부분 적용했을 때 그 뒷일을 보장하지 못하기 때문에 안전하게 expansive라고 보는 것입니다.
허기홍 가 2009년11월25일 10:48에 수정함, 총 1 번 수정됨 |
|
위로 |
|
|
이광근
가입: 2005년 8월 29일 올린 글: 68
|
올려짐: 2009년11월25일 9:58 주제: Re: expansive 질문입니다 |
|
|
이중호 씀: | 교재 189쪽에 보면 expansive(E1 E2) = true라고 돼 있는데
이해가 안됩니다
expansive(E1) or expansive(E2)가 아닐런지,,, |
예를들어
f 10
이라는 식을 생각해 봅시다. (f = E1, 10 = E2)
f라는 변수식과 10이라는 식은 모두 expansive하지 않죠.
하지만, 그 f함수가 실행중에는 expansive할 수 있습니다.
일반적으로 함수적용식 E1 E2에서
과연 어떤함수가 불리워질 지 알기가 어렵습니다.
함수가 꼭 정의된 이름으로 불리는 것은 아니기 때문입니다.
알려면 복잡한 분석이 필요합니다.
복잡한 분석은 피하면서 안전하게 갈 수 있겠지요.
그래서 E1 E2식의 경우
무조건 true로 한 것입니다.
-K |
|
위로 |
|
|
|