2014-09-11 5 views
0

고차 함수의 정의를 살펴 보겠습니다. 이 정의에 따라 고차 함수는 값 또는 함수를 취하여 함수 또는 값을 출력으로 생성 할 수 있습니다. 나는 F #과 Erlang 책을 읽고 있는데, 지금까지는 함수가 결과로 함수를 생성하는 곳을 찾지 못했거나 결과 함수로 내게 나오지 않았다. I는 (동작 또는 C에서 # Func을 <> 등)를 입력으로서 기능을 취하는 함수 여기서 이러한 예에서 wikibook on F#
고차 함수의 결과로 함수를 만드는 방법은 무엇입니까?

open System 

let square x = x * x  

let cube x = x * x * x 

let sign x = 
    if x > 0 then "positive" 
    else if x < 0 then "negative" 
    else "zero" 

let passFive f = (f 5) 

에 기초하여 샘플 코드가 이해 차례 작성 PASSFILE 고차 함수이다 출력으로서의 기능? 그렇다면 누군가 함수가 결과로 함수를 생성하는 간단한 예제를 보여줄 수 있습니까?

답변

4

가장 간단한 예제는 단지 카레 함수입니다.

예를 들어

let multiply (a : int) (b : int) : int = a * b 

을 가져 가라.

multiply 5 == fun b -> 5 * b 
: 그냥

int -> (int -> int) 

그래서이 가 다른 기능을 하나의 정수 (a)을 받아 반환하는 함수 정말 당신이

int -> int -> int 

같은이 서명의 글

고차 함수가 모든 함수 프로그래밍/F # whe에서 볼 수 있습니다. n 카레 함수를 사용합니다.

반대편에 귀하의 예는 다음과 같이 다시 작성할 수 있습니다 :

let passFive (f : int -> 'b) : 'b = f 5 

그래서이 그것이 기능 (f)을 취한다는 점에서 고차 기능이지만 하나를 반환하지 않습니다 -는 AS 이름은 5을 호출하는 모든 함수에 전달합니다 (다른 일반 이름은 5 일 수 있음).

2

또 다른 예는 구성 연산자 인 (>>)(<<)입니다. 이것들은 두 개의 함수를 취해 그것들을 하나의 함수로 구성합니다. 예 :

let twoNPlusOne = (*) 2 >> (+) 1 

연산자 유형은 ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c)입니다. 이 경우 모든 유형 변수는 int이고 피연산자는 모두 int -> int이며 결과도 마찬가지입니다.

+0

옙 +1 (많은 것들이 있습니다) - 물론 연산자 자체는 카레 함수'(>>)입니다 : ('a -> b) -> ('b -> 'c) a -> 'c)': D – Carsten

관련 문제