1

F# Wikibook on High Order Functionsのいくつかの例に従っていました。

タイトルの下の 2 番目のコード スニペット、Composition Functionには次のコード スニペットがあります。

#light
open System

let compose f g x = f (g x)

let xSquared x = x*x
let negXPlusFive x = -x/2.0 + 5.0

let fog = compose xSquared negXPlusFive

// ... Console.WriteLine statements....

私が理解に問題を抱えているのは

let xSquared x = x*x

F# インタラクティブ シェル (fsi.exe) で単独で実行すると、次のシグネチャが得られます。

> let xSquared x = x*x;;

val xSquared : int -> int

しかし、コード スニペット全体を実行するとxSquared、以下が返されます。

val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
val xSquared : float -> float
val negXPlusFive : float -> float
val fog : (float -> float)

なぜxSquaredテイクfloatとリターンはfloat?

4

2 に答える 2

3

詳細情報があれば、F# は xSquared が float 引数で呼び出されていると判断できます。negXPlusFive を「let negXPlusFive x = -x + 5」のようなものに変更すると、fog と xSquared が「int -> int」になることがわかります。

于 2009-04-22T00:36:41.517 に答える