2

これはかなり苛立たしいことです。最新バージョンの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)と一致しません-

誰かがこれを説明できますか?

4

2 に答える 2

9

List.fold_left関数の古い名前でしたが、現在はList.foldです。あなたが抱えている問題は、List.fold2つの引数を取ることです。最初の引数はリストを折りたたむ関数であり、2番目の引数は再帰の最初のシードです。使用する関数は、これまでの現在の合計とリストの次の要素の2つの引数を取る必要があります。あなたは次のようなものを使いたい

List.fold (fun sum x -> sum + x * x) 0 [1..10]

取得したエラーは、使用しようとしている関数のタイプが正しい数の引数をとっていないことを示しているだけです。

于 2010-07-01T01:26:32.250 に答える
4

ちなみに、ライブラリリファレンスドキュメントはここにあります:

http://msdn.microsoft.com/en-us/library/ee353567.aspx

たとえばを参照してください

http://msdn.microsoft.com/en-us/library/ee353738.aspx

(Intellisenseなしで開発することがどれほど難しいかを忘れました。)

また、上部の「#light」は削除できます。不要です。

于 2010-07-01T01:45:13.230 に答える