回答:
HaskellとF#のセマンティクスには固有の違いがあります。Haskellでは、関数呼び出しは実際の計算を実行しませんが、「サンク」として知られるヒープオブジェクトを割り当てます。サンクが自分自身または別のサンクへのリンクを持っていることはまったく問題ありません。しかし、F#で、関数呼び出しのような表現を作り、実際の呼び出しでlet x = 1 : 2 : x in x
無効に-それが必要とするx
前に構築することが1 : 2 : x
構築されます。ただし、無限リストの定義は多かれ少なかれ合理的であり、定義する何らかの方法が存在する必要があります。ここにのルーツがありrec
ます。さらに知りたい場合は、SMLおよびHaskellの操作上のセマンティクスを検索して読んでください。これは異なります。