게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

Homework 7 Polymorphism test

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최종욱



가입: 2009년 9월 15일
올린 글: 84

올리기올려짐: 2010년11월26일 20:56    주제: Homework 7 Polymorphism test 인용과 함께 답변

simple type과 관련한 테스트들(기본적인 동작)은 아래 올린 6-1, 6-2 테스트셋을 참고하시면 되구요
이중에서는 polymorphism으로는 통과해야하지만 simple type checking이라 통과하지 못해서 error로 되어있는 코드들이 몇 개 있을텐데요,
그런 것들은 눈치껏 잘 테스트를 해주시고...

여기서는 polymorphism과 관련된 것들만 몇 개 더...

숙제의 테스트 입력에서는 일반화된 타입으로 결과가 나오는 경우가 하나도 없는데
올바르게 짠 것을 테스트하기 위해서는 일반화된 결과를 찍어보...는게 편리합니다.
그래서 아래 코드들은 (숙제에서 들어오는 입력은 아니지만) output에 일반화된 타입이 있을 수 있습니다.

일반화된 타입이 맞는가를 테스트해보기 위해서는 여러분의 구현에 맞는 toString 함수를 장착하시면 되겠습니다. (결과가 simple type으로 나오는 경우는 그냥 됩니다)

====================================
숙제 문서의 예제들
====================================

코드:

(* 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 2009");
const 1 + const true + const "kwangkeun yi"
end

int

코드:

(* example 2: polymorphism with imperatives *)
let val f = fn x => malloc x
in
let val a = f 10
val b = f "pl"
val c = f true
in
a := !a + 1;
b := "hw7";
c := !c or false
end
end

bool

코드:

(* example 3: polymorphic swap *)
let val swap =
fn order_pair =>
if (order_pair.1) (order_pair.2)
then (order_pair.2)
else (order_pair.2.2, order_pair.2.1)
in
swap(fn pair => pair.1 + 1 = pair.2, (1,2));
swap(fn pair => pair.1 or pair.2, (true, false))
end

(bool, bool)

코드:

(* example 4 : S K I combinators *)
let val I = fn x => x
val K = fn x => fn y => x
val S = fn x => fn y => fn z => (x z) (y z)
in
S (K (S I)) (S (K K) I) 1 (fn x => x+1)
end

int

====================================
a polymorphism test
====================================

코드:
(fn x=>1) 3

int

코드:

fn x=> fn y=> x y

('a -> 'b) -> ('a' -> 'b)

코드:

let rec f = fn x=>x in
f "이것은"; f true; f "폴리모픽"; f "identity"; f ("function", 1); f (malloc false)
end

loc(bool)



코드:

let rec f = fn x => (f "wook" ; f x) in (f 1) end


ERROR (string, int unification fail)

코드:

 let rec f = fn x => (f "wook" ; f x) in f end

string -> 'a

코드:

let rec f = fn x=> let rec g = fn x => f x in g x end in f end

'a -> 'b

코드:

 let rec f = fn x=> let rec g = fn x => f x in g x end in f; (f true) + 1; (f 1) and false end

bool (무한루프)

코드:

let rec f = fn x => f f in f end

error (타입이 정의되지 않음)

코드:

let val f = fn x => fn y => write (write x; y) in
f  end

'a -> 'b -> 'b


====================================
write, eq의 polymorphism with constraints 는 조금(?) 까다롭습니다.
====================================

코드:

(fn x=> write x) write (3, 4)

error

코드:

let val f = fn x => write x in
f 1; f true; f "asdf" end

string

코드:

let val f = fn x => write x in
f 1; f true; f "asdf"; f (1,2)
end

error ( pair is not able to be written )

코드:

let val g = fn t => let rec f = fn x=> f (write x) in f t end in g (malloc 1) end

error (write location ?)

코드:

(1,2) = (3,4)

error (pair is not comparable)

코드:

let val comp = fn x=> fn y=> (x = y) in
   comp 3 1;
   comp "asdf" "gg";
   comp (fn x=>1) (fn y=>1)
end

error (function is not comparable)

코드:

let val comp = fn x=> fn y=> (x = y) in
   comp 3 1;
   comp "asdf" "gg"
(* syntax error수정했어요 *)
end

bool

코드:

let val f = fn x => fn y => write (write x; y) in
f (0, 0)
end

error ( pair 는 write 불가)
_________________
Jongwook Choi
Seoul National University, School of Computer Science & Engineering
위로
사용자 정보 보기 비밀 메시지 보내기
최홍림



가입: 2009년 9월 15일
올린 글: 9

올리기올려짐: 2010년11월26일 23:24    주제: 언제나 고맙습니다 인용과 함께 답변

몇 개가 안 돌아가서 슬프지만

언제나 고맙습니다.

ㄳㄳ
위로
사용자 정보 보기 비밀 메시지 보내기
최홍림



가입: 2009년 9월 15일
올린 글: 9

올리기올려짐: 2010년11월26일 23:30    주제: 저어기 인용과 함께 답변

let rec f = fn x=> let rec g = fn x => f x in g x end in f; (f true) + 1; (f 1) and false end

위 무한 루프 도는 코드가 타입 체크 통과하나요?

(f true) + 1, (f 1) and false 때문에 돌지 않아야하는것 아닌가요?

---------------

ㅈㅅ

되네요...
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay