ジョンがすでに言ったように、あなたprintHelloは関数ではありません-それはタイプの値ですunit。printfn(行ったように)必要なすべての引数を指定すると、命令型の操作が実行され、戻り値が返さunitれます(これは、として記述された単一の値のみを持つ型です())。その宣言を書くとすぐに印刷されることがわかります。
> let printHello = printfn "%A" "Hello";;
"Hello"
val printHello : unit = ()
後で使用するときはprintHello、単にこのunit値を参照します(情報は含まれていません)。
unit -> unit実行されるたびに何かを実行する(タイプの)関数にしたい場合は、Johnが投稿したサンプルを使用できます。
必要なすべてのパラメーターを指定したため、関数printfnは部分的に適用されませんでした(したがって、すぐに印刷できます)。部分適用を使用したい場合は、次のようなものを使用できます。
> let printHello = printfn "%s %s" "Hello";; // Note - didn't give value for second %s
val printHello : string -> unit
NowprintHelloは、2番目のパラメーターを待機してから実行する関数です。
> printHello "World";;
Hello World
val it : unit = ()
> printHello "F#";;
Hello F#
val it : unit = ()