게시판 인덱스

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

타입이 ('a -> int -> 'a) -> 'a -> mylist -> 'a 형태로 나오면 어떻게 하나요

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



가입: 2011년 3월 3일
올린 글: 1

올리기올려짐: 2011년3월11일 5:45    주제: 타입이 ('a -> int -> 'a) -> 'a -> mylist -> 'a 형태로 나오면 어떻게 하나요 인용과 함께 답변

# type mylist = Nil | Cons of (int * mylist);;
type mylist = Nil | Cons of (int * mylist)

# let rec fold_left f init lst = match lst with Nil -> init | Cons(head, tail) -> fold_left f (f init head) tail;;
val fold_left : ('a -> int -> 'a) -> 'a -> mylist -> 'a = <fun>


# let _ = print_int (fold_left (fun x y -> x + y) 0 Cons(1, Cons(2, Cons(3, Nil))));;
Characters 41-42:
let _ = print_int (fold_left (fun x y -> x + y) 0 Cons(1, Cons(2, Cons(3, Nil))));;
^
Error: This expression has type 'a -> 'b but is here used with type int
# let _ = print_int (fold_left (fun x y -> x + y) 0 (Cons(1, Cons(2, Cons(3, Nil)))));;
6- : unit = ()

Exercise 1.3을 이렇게 짜려고 했는데 형식이 'a 꼴로지정되어버리고 실행도 Cons앞에 괄호를 붙였을때면 올바르게 나옵니다. 왜 그렇고 어떻게 해야하나요
위로
사용자 정보 보기 비밀 메시지 보내기
이원찬



가입: 2010년 3월 4일
올린 글: 34

올리기올려짐: 2011년3월11일 11:42    주제: 인용과 함께 답변

1. 작성하신 fold_left가 'a를 가진 타입을 갖는 것은 당연합니다.
왜냐하면 fold_left 함수 내에서 넘겨받은 함수 f의 첫 번째 인자에 대해
어떠한 가정도 하지 않기 떄문입니다.
OCaml tutorial 시간에 제가 다형 타입에 대해서 잠깐 언급했었는데
작성하신 fold_left가 바로 다형 타입을 갖는 함수가 된 것입니다.
이 다형 타입이 문제에서 요구한 fold_left의 타입을 표현할 수 있으므로
그대로 내셔도 됩니다.
혹, 타입을 맞춰주고 싶으시면 다음과 같이 작성하시면 됩니다:

let rec fold_left : (int -> int -> int) -> int -> mylist -> int = ...

2. 값을 생성하는 표현식을 항상 괄호로 싸주시기 바랍니다.
이는 OCaml의 문법 검사 규칙이 깐깐해서 그렇습니다.
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2011) 시간대: GMT + 9 시간(한국)
페이지 11

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


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