이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
최혁근
가입: 2008년 9월 14일 올린 글: 4
|
올려짐: 2008년12월3일 1:04 주제: Generalized된 타입은 결과를 어떻게 처리하나요? |
|
|
예제에서
코드: | let
val I = fn x -> x
in
I I
end |
와 같은 경우에는 타입이
('a -> 'a)
가 될 거 같은데 이런 경우는 결과를 어떻게 보여줘야하나요?
M 언어에서는 저런 타입은 정의되지 않은거 같은데...
제가 잘못 알고있는건가요?;;;; |
|
위로 |
|
|
최원태
가입: 2006년 9월 16일 올린 글: 369
|
올려짐: 2008년12월3일 8:53 주제: |
|
|
지적하신대로, M언어의 정의에 의하면
위와 같은 타입 (함수타입)을 가지는 코드는 프로그램이 아닙니다.
따라서 실행기에 들어가기 전에 프로그램이 멈춰야 합니다.
예제에는 I I 뒤에 뭔가가 더 있죠?
그 부분에 의해서 정수 타입으로 결정되기 때문에
전체 코드가 프로그램입니다. |
|
위로 |
|
|
최혁근
가입: 2008년 9월 14일 올린 글: 4
|
올려짐: 2008년12월3일 11:11 주제: |
|
|
코드: | (* example 1: polymorphic toys *)
let
val I = fn x => x
val add = fn x => x.1 + x.1
val const = fn n => 10
in
I I;
add(1, true) + add(2, "snu 310 fall 2006");
const 1 + const true + const "kwangkeun yi"
end |
이번 숙제 스펙에서 위와 같은 예제가 있었는데,
윗 글의 예제처럼 일반화된 타입을 리턴하게 되면 타입에러를 발생시켜야
한다는 것인가요?
그럼 테스트 할 때는 무조건 기본타입을 리턴할 수 있도록 코드에
application을 적절하게 넣어주어야 하는 것이 맞나요? |
|
위로 |
|
|
최원태
가입: 2006년 9월 16일 올린 글: 369
|
올려짐: 2008년12월3일 11:51 주제: |
|
|
코드: | let
val I = fn x -> x
in
I I
end |
가 제대로된 프로그램이 아닌 것은
리턴 타입에 일반화된 타입이 있기 때문이 아니라
리턴 타입이 함수 타입 형태이기 때문입니다. |
|
위로 |
|
|
|