 |
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
강동호
가입: 2015년 9월 3일 올린 글: 17
|
올려짐: 2015년9월13일 15:51 주제: 숙제 1-3 에 대한 질문 |
|
|
조교님 안녕하세요. 수고 많으십니다.
추가로 과제중에 질문이 생겨서 글을 남깁니다.
iter(n,f)
스펙에 따라서 위와 같은 함수를 생각해보면 int * (int -> int) -> (int -> int) 형으로 선언이 되어야 할 것 같습니다.
궁금한 것이 하나 있는데요. 합성 함수를 생각해보면 f o g = f(g) 의 형태인데, ocaml에서 이런 연산을 정의하려면 f가 (int -> int) -> (int -> int) 로 정의가 되어 있어야 합니다.
실제로 주어지는 함수 f 는 (int -> int) -> (int -> int) 가 아닌 (int -> int) 형입니다.
이 것을 전환할 수 있는 문법이나, 아이디어가 있을 수 있을까요? 아니면 그 외의 새로운 접근법을 사용해야 할까요?
ps.
혹시 iter(n,f) 함수의 형이 int * (int -> int) -> int -> int 인건가요? 즉 n과 f와 정수 x 를 받아서 정수를 출력하는 함수인건가요?
사실 생각해보면 f o g 라는 함수는 수학적으로 (f o g)(x) 로 정의되기 때문에 정수 x를 인자로 받는 것이 합리적인 것 같다고 생각됩니다. |
|
위로 |
|
 |
최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년9월13일 23:14 주제: |
|
|
안녕하세요, 프로그래밍 언어 조교 최재승입니다.
인용: | 스펙에 따라서 위와 같은 함수를 생각해보면 int * (int -> int) -> (int -> int) 형으로 선언이 되어야 할 것 같습니다. |
엄밀히는, int * ('a -> 'a) -> ('a -> 'a) 가 되어야 할 것입니다. f 는 정수 뿐만이 아니라 임의의 타입을 인자로 받아서 같은 타입을 리턴하는 함수이므로, 'a -> 'a 로 써야 합니다.
인용: | 궁금한 것이 하나 있는데요. 합성 함수를 생각해보면 f o g = f(g) 의 형태인데, ocaml에서 이런 연산을 정의하려면 f가 (int -> int) -> (int -> int) 로 정의가 되어 있어야 합니다. |
f o g = f(g) 라는 표현은 조금 문제가 있는 것 같습니다. (f o g) (x) = f(g(x)) 가 맞는 표현입니다. 여기서 f 함수는 'a -> 'a 타입(e.g. int -> int)이 되는 것이 맞습니다. f는 g(x)를 인자로 받는 것인데, g를 인자로 받는 것으로 착각하신게 아닌가 싶습니다.
인용: | 혹시 iter(n,f) 함수의 형이 int * (int -> int) -> int -> int 인건가요? 즉 n과 f와 정수 x 를 받아서 정수를 출력하는 함수인건가요? |
위에서 강동호 님이 쓰신 int * (int -> int) -> (int -> int) 표현은, int * (int -> int) -> int -> int 와 같은 의미, 같은 타입입니다. OCaml 튜토리얼 시간에 Currying을 설명드릴 때 이를 언급해드린 적이 있습니다.
http://ropas.snu.ac.kr/~ta/4190.310/15/ocaml_tutorial15f.pdf 의 23 페이지를 참조해 주세요.
조교 드림 |
|
위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|