質問
OKこれはかなりイライラします、私はSharpDevelopの最新バージョンをインストールし、F#コンパイラをインストールしました(SharpDevelops Webサイトからのリンクによる)
私はVistaで走っています。
これまでのところ、すべてが正常に機能しています。
しかし、何らかの理由で、list.fold_leftを使用しようとすると、単にコンパイルを拒否しますが、list.foldは機能しているようです。
これがエラーです:
値、コンストラクター、名前空間、またはタイプ 'fold_left'が定義されていません(FS0039)
これがコードです:
#light
open System
let nums = [1..10]
let ans = List.fold_left (+) 0 nums
Console.WriteLine("answer: {0}", ans)
// Just to make it pause
let pause = Console.ReadLine()
さらなる問題は、折り目を使用してリスト内の各アイテムを二乗しようとしています。
1^2 + 2^2 + 3^2 ...
私は、foldが関数とリストを取ると仮定したので、次のように試しました。
let sq x = x*x
let ans = List.fold (sq) 0 nums
しかし、これにより、2行目の両方で次のエラーが得られます。
型 'int-> int'は型 'int'(fs0001)と一致しません - 型 '' a-> int 'は型' int '(fs0001)と一致しません -
誰かがこれを説明できますか?
解決
List.fold_left
関数の古い名前でしたが、今は List.fold
. 。あなたが持っている問題はそれです List.fold
2つの引数を取ります。最初の引数はリストを折りたたむ機能であり、2番目は再帰の最初のシードです。使用する機能は取得する必要があります 2 引数、これまでの合計の実行、およびリストの次の要素。あなたはようなものを使いたいです
List.fold (fun sum x -> sum + x * x) 0 [1..10]
あなたが得たエラーは、あなたが使用しようとしていた関数のタイプが適切な数の引数を持っていなかったことをあなたに伝えることでした。
他のヒント
ちなみに、ライブラリリファレンスドキュメントはこちらにあります。
http://msdn.microsoft.com/en-us/library/ee353567.aspx
例を参照してください
http://msdn.microsoft.com/en-us/library/ee353738.aspx
(Intellisenseなしで発達するのがどれほど難しいか忘れていました。)
また、上部の「#light」を削除することもできますが、必要ありません。