2

棒グラフと縦棒グラフの描画に関するReal-World Functional Programming ブログからこれに続いて、一連のタプル (data_value、frequency) に遅延シーケンスで格納されているデータのヒストグラムを描画しようとしていました。

シーケンスをリストに変換しないと機能しません。エラー メッセージは、シーケンス " the IEnumerable 'T does not support the Reset function" の場合です。遅延評価されたシーケンスから .NET ライブラリを使用してヒストグラム/チャートなどを生成する方法はありますか?

また、(初心者のクエリ アラート)、コンソールからプログラムを実行したときにグラフを永続化する方法はありますか? 通常System.Console.ReadKey() |> ignoreはチャートウィンドウがハングアップし、それ以外の場合は一瞬で消えます。「Send to Interactive」を使用して、今まで結果を確認してきました。

4

2 に答える 2

4

問題は、F# シーケンス式表記法を使用して生成された (タイプseq<T>の、単に のエイリアスである) シーケンスがメソッドIEnumerable<T>をサポートしていないことです。Resetこのメソッドは、チャート ライブラリで必要とされます (画面を再描画するたびにデータを取得する必要があるため)。

これは、たとえば次のような場合は機能しないことを意味します。

seq { for x in data -> x } |> FSharpChart.Line

モジュールの標準ライブラリ関数の多くはSeqシーケンス式を使用して実装されているため、結果は をサポートしませんResetList.ofSeqこれを修正するには、データをリスト ( を使用) または配列 ( を使用)に変換するか、リストをArray.ofSeq使用してコードを記述します。

[ for x in data -> x ] |> FSharpChart.Line

...そして、いくつかの関数を使用している場合は、から1つを取得できますList(すべてのSeq関数が で使用できるわけではないためList、変換を使用する必要がある場合があります):

[ for x in data -> x ] |> List.choose op |> FSharpChart.Line
于 2012-07-07T10:09:46.967 に答える
3

いいえ、シーケンスは受け付けません。

とはいえ、seq をサポートしないのには十分な理由があります。それは構造そのものに関するものです: seq はまさに seq であり、したがって、グラフの描画に必要な種類の操作をサポートしていませんし、サポートすべきではありません。そうは言っても、このスタックがより高度で、より多くの使用スタイルをサポートすることを本当に望んでいます。

だから答えは

|> Seq.toArray

また

|> Seq.toList

チャート ライブラリに送信する前に

于 2012-07-07T10:01:37.370 に答える