9

F#を学び始めたばかりです。この本では、次の表記法を使用しています。

let name() = 3
name()

これと何が違うのか:

let name = 3
name

?

4

4 に答える 4

11

()関数呼び出しの構文などとは絶対に考えないでください。3、5、'q'、false、または "blah" などの単なる値です。それはたまたま type の値でUnitあり、実際にはそれが unit 型 の唯一の値ですが、実際にはそれは的外れです。()ここにあるのは単なる値です。私はそれを十分に強調することはできません。

最初に検討する

let name x = 3

これは何ですか?これは、x の関数を定義するだけです。ここで、x は任意の型にすることができます。C# では次のようになります。

int Name<T>(T x) 
{
    return 3;
}

ここで見てみるとlet name () = 3(余分なスペースをそこに置くことをお勧めします。そのため、()構文構造よりも価値があるように見えます)、C# では (疑似コード) のようなものと考えることができます。

int Name<T>(T x) where T == Unit  //since "()" is the only possible value of Unit
{
    return 3;
}

または、もっと簡単に

int Name(Unit x)
{
    return 3;
}

上記の C# バージョンと同様に、すべてlet name () = 3が引数を取り、3 を返す関数の定義であることがわかります。Unit

ただし、C#let name = 3の場合と同様に、これは単なる変数定義です。var name = 3

于 2013-07-26T01:57:59.893 に答える
8

let name() = 3
name()

nameタイプの関数unit -> intです。

let name = 3
name

nameタイプの整数intです。

F# では、すべての関数に入力型と出力型があります。の入力タイプはlet name() = 3unit、値は 1 つだけです()。その出力タイプはintで、値は から–2,147,483,648まで2,147,483,647です。別の例として、 typeboolには と の 2 つの値しかありませtruefalse

では、 の使用法についての質問に戻ります()。関数の入力値を指定しないと実行できません。そのため、関数let name()=3を実行するには入力値を指定する必要があり、その入力タイプがunitであるため、使用できる唯一の値は です()

name 関数を定義する別の方法を次に示します。

let name : (unit -> int)  = (fun _ -> 3);;

これを次と比較します。

let name : int = 3
于 2013-07-26T01:20:02.540 に答える
4

Usingは、単純な整数である 2 番目のケースではなく、()type のパラメーターを取る関数を作成します。unit

これは、関数の実行を制御する場合に特に重要です。

主な違いは、

let name() = 
    printfn "hello"
    1

let name = 
    printfn "hello"
    1

それから

let t = name + name

「こんにちは」を一度出力します。しかし

let t = (name()) + (name())

「こんにちは」を2回出力します。

関数が評価される順序を考慮するときは、これに注意する必要があります。

次のプログラムを検討してください。

let intversion = 
    printfn "creating integer constant"
    1

printfn "integer created"

let funcversion() =
    printfn "executing function"
    1

printfn "function created"

let a = intversion + intversion
printfn "integer calculation done"
let b = (funcversion()) + (funcveriosn())
printfn "function calculation done"

これにより、以下が順番に出力されます

  1. 整数定数の作成
  2. 作成された整数
  3. 関数が作成されました
  4. 整数計算完了
  5. 実行機能
  6. 実行機能
  7. 関数計算完了
于 2013-07-26T00:24:56.050 に答える