私はF#インタラクティブで次のコードを試していますが、エラー 'FS0001'が発生します。 'int - > int'型が 'int'型と一致しません。ここでは、私が試しているコードは関数呼び出しがエラーを返すのはなぜですか?
> let rec factorial n = function
| 0 -> 1
| n -> n * factorial (n - 1);;
これは 'F3の科学者の本の例ではありません。 ありがとう、
私はF#インタラクティブで次のコードを試していますが、エラー 'FS0001'が発生します。 'int - > int'型が 'int'型と一致しません。ここでは、私が試しているコードは関数呼び出しがエラーを返すのはなぜですか?
> let rec factorial n = function
| 0 -> 1
| n -> n * factorial (n - 1);;
これは 'F3の科学者の本の例ではありません。 ありがとう、
あなたが定義したように、factorial
は2つの引数をとりますが、1つしか渡していません。その結果、関数の2番目の枝は、の部分的に適用された関数でint
を乗算しようとしています。
最初の行は
let rec factorial = function
(サンセリフn
)を読んでください。
構文の詳細を追加するだけです。function
キーワードは、暗黙のうちに名前を付けずに引数をとり、その値に対してパターンマッチングを行う関数を作成します。
これを行うにはかなりの数の同等の方法があります - 説明ildjarnようfunction
を使用して:
let rec factorial = function
| 0 -> 1
| n -> n * factorial (n - 1)
あなたはまたn
を取る関数としてfactorial
を宣言してからmatch
を使用することができます。
let rec factorial n =
match n with
| 0 -> 1
| n -> n * factorial (n - 1)
また、完全性のために、fun
を使用して関数を作成することもできます(function
のより単純なバージョンです)パターンマッチングの複数のケースを書き込むために: - 第1)は、任意の正当な理由なしに(わずかに複雑であるので、私は、最初の2つのいずれかの希望
let rec factorial = fun n ->
match n with
| 0 -> 1
| n -> n * factorial (n - 1)
を最初の2つのオプションは、両方の慣用F#コードであります。