パラメータ:再帰関数は、私は、単純な再帰関数を作って、それが動作するように期待(しかし、それはしません)
open System
open System.Threading
let f =
let r = Random()
let rec d =
printfn "%d" (r.Next())
Thread.Sleep(1000)
d
d
f
私は、次の作業機能(になってしまったが、理解なしにインテリセンスの助けを借りてなぜ)機能が動作しませんでした前回:
open System
open System.Threading
let f : unit =
let r = Random()
let rec d() =
printfn "%d" (r.Next())
Thread.Sleep(1000)
d()
d()
f
は、なぜ私が明示的にunit
と()
を述べる必要がありますか?
'実際にタイプにfを注釈する必要はありませんでした。これは無関係なステップでした」しかし、この無関係なステップ(他のすべてが正しい場合)がなければ、それはまだエラー:値の制限をスローします。値 'f'は総称型val fを持つと推測されています: '_a>' f 'を単純なデータ項として定義するか、明示的な引数を持つ関数にするか、または一般的なものではない場合は、型注釈 – Bad
あなたはそうです、私は価値の制限を忘れました。しかし 'f'を関数にすると、その問題はとにかく消えてしまいます。 –
'f()'を呼び出してそれを呼び出すと(それ以外はすべて正しい)、この 'Value restriction'例外がスローされます。したがって、 'unit'を明示的に記述することが唯一の方法です。しかし、まだ答えに感謝、彼らはすべて本当に有用です。 – Bad