이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
현경렬
가입: 2005년 9월 28일 올린 글: 19 위치: 스쿨
|
올려짐: 2005년11월21일 23:47 주제: 6-2(저지방M)에서 모르는 타입.(fn x => 1) |
|
|
fn x => 1
의 타입은 무엇인가요?
-- 결석 횟수가 많아서 죄송합니다. _________________ Programming Rumble |
|
위로 |
|
|
최성록 손님
|
올려짐: 2005년11월21일 23:55 주제: Re: 6-2(저지방M)에서 모르는 타입.(fn x => 1) |
|
|
현경렬 씀: |
fn x => 1
의 타입은 무엇인가요?
|
unknown type이 있는 경우 저는 에러가 나도록 하였습니다. 유사하게 아래와 같은 경우도 에러가 발생합니다. (이런 구현이 틀린 건가??)
폴리모픽한 타입이 불가능하도록 구현하였습니다. 타입 체커가 sound하면 될 것 같은데요...
코드: |
let
val plman = fn n => write n
in
write "what is result??"
end
|
현경렬 씀: |
-- 결석 횟수가 많아서 죄송합니다.
|
-- 취침 휫수가 많아서 죄송합니다.
[/code] |
|
위로 |
|
|
현경렬
가입: 2005년 9월 28일 올린 글: 19 위치: 스쿨
|
올려짐: 2005년11월21일 23:58 주제: Re: 6-2(저지방M)에서 모르는 타입.(fn x => 1) |
|
|
최성록 씀: | unknown type이 있는 경우 저는 에러가 나도록 하였습니다. 유사하게 아래와 같은 경우도 에러가 발생합니다. (이런 구현이 틀린 건가??)
폴리모픽한 타입이 불가능하도록 구현하였습니다.
|
저는 이게 폴리모픽이라고는 생각하지 않습니다, (그나마 들었던)수업 시간에도 모노모픽이라고 한 것 같고, nML도 a' -> b' 같은 메시지를 보내는데 이것도 모노모픽이라고 한 것 같군요.(a' -> b' 라는 한 타입만 가능하므로) _________________ Programming Rumble |
|
위로 |
|
|
공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2005년11월22일 0:07 주제: |
|
|
제 경우에는
코드: |
let
val plman = fn n => write n
in
write "what is result??"
end
|
까지는 잘 돕니다만,
코드: |
let
val plman = fn n => write n
in
plman "what is result??"
end
|
이런식으로 실질적으로 plman을 사용하는 경우에는 type check error가 뜨는군요.
함수가
코드: |
val plman = fn n => n
|
와 같은 경우에는 a' -> a' 처럼 간주될 수 있겠지만
코드: |
val plman = fn n => write n
|
의 경우에는
임의의 타입이 아닌 Int, Bool, String만 올 수 있게 되어서
함수 타입이 모노몰픽하다고 보기 어렵지 않나요?
ad-hoc polymorphism이라고 하는 것 같던데, 정확한지는 모르겠습니다.
궁금한 부분이고요.
equality와 write구현하느라고 googling만 2일 정도 한 것 같군요 ㅜㅜ
____________________________
그건 그렇고,
내일
컴구숙제+데통숙제+PL숙제+공수2 퀴즈를 보는 분들에게
무운이 가득하시기를!! |
|
위로 |
|
|
최성록 손님
|
올려짐: 2005년11월22일 0:11 주제: 하하 |
|
|
공순호 씀: | 내일
컴구숙제+데통숙제+PL숙제+공수2 퀴즈를 보는 분들에게
무운이 가득하시기를!! |
컴구 + 데통 + PL 시간에 뵈요^^
근데 숙제 두 번째 타입이 다 맞다고 가정하고,
코드: | val (Pair (v1, v2), m') = eval (e, m, exp) |
이런 식의 구문을 남발하다보니 warning이 심히 많이 발생하는군요.
다른 분들은 어떤식으로 다이어트 하셨는지요?? |
|
위로 |
|
|
공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2005년11월22일 0:21 주제: |
|
|
아 그러고보니
글 제목인 fn x => 1 을 빼먹었군요.
a' -> int 로 가는 타입인 것으로 처리했습니다.
저지방으로 가고 난 이후에는 저도 warning 천국이군요.;
type system으로 커버 되지 않는 runtime error가 있을 것 같아서(같아서?)
소극적으로 하나씩 빼나가고 있습니다. |
|
위로 |
|
|
현경렬
가입: 2005년 9월 28일 올린 글: 19 위치: 스쿨
|
올려짐: 2005년11월22일 1:18 주제: Re: 하하 |
|
|
최성록 씀: |
코드: | val (Pair (v1, v2), m') = eval (e, m, exp) |
이런 식의 구문을 남발하다보니 warning이 심히 많이 발생하는군요.
다른 분들은 어떤식으로 다이어트 하셨는지요?? |
코드: | val v' = eval (e, m, exp)
case v' of (Pair(v1, v2), m') => ...
| _ => raise Error("이건 절대 나올 수가 없어!")
|
라고 하는게 나을 것 같습니다.
eval한 결과가 pair가 아닐 수도 있으니까요(확실해도, warning을 없애는 차원에서 ...)
(저는 저렇게 했습니다.) _________________ Programming Rumble |
|
위로 |
|
|
정민재 손님
|
올려짐: 2005년11월22일 23:47 주제: |
|
|
a' -> a' 나 a' -> int 에서 a' 는 어떻게 표현할 수 있나요 ㅡ.ㅡ;;; |
|
위로 |
|
|
서성현
가입: 2005년 9월 29일 올린 글: 54
|
올려짐: 2005년11월23일 0:02 주제: 표현 못합니다. |
|
|
정민재 씀: | a' -> a' 나 a' -> int 에서 a' 는 어떻게 표현할 수 있나요 ㅡ.ㅡ;;; |
'a는 내부 계산에서는 쓰일 수 있겠지만
외부로 표현해야 하는 경우는 없습니다.
코드를 예로 드는 것이 이해하기 쉬울까요.
simple type system을 기준으로 설명할께요.
코드: | let
val f = fn x => x
in
7
end |
위 프로그램의 타입은 int입니다.
f의 타입은 a1 -> a2이고요. a1, a2는 아직 알 수 없지요.
코드: | let
val f = fn x => x
in
f
end |
위 프로그램의 타입은 'a -> 'a 가 아닙니다.
프로그램의 최종 계산 결과는 함수 타입이 될 수 없으므로,
타입 체커에서 오류를 뱉어내어야 합니다.
코드: | let
val f = fn x => x
in
f 7
end |
위 프로그램의 타입은 int 입니다.
f의 타입은 (int)->(int)이고요. 왜냐하면 "f 7"이라는 명령문 때문에..
코드: | let
val f = fn x => x
in
f 7 ; f true
end |
위 프로그램의 타입은 bool이 아닙니다.
f의 타입은 (int)->(int)이면서 동시에 (bool)->(bool)이어야 하는데
simple type system에서는 그런 경우를 허용하지 않으므로
타입 체커에서 오류를 뱉어내어야 합니다.
위의 예제들을 보면,
프로그램의 타입(굵은 글씨) 속에 'a가 들어가는 경우는 없지요?
따라서 'a를 표현해야 할 필요는 없습니다.
제가 질문 내용을 제대로 해석한 건지 모르겠네요. _________________ http://snupl.wo.to |
|
위로 |
|
|
|