F#交互式函数数组
我试图在post上展开,但在使用数量可变的函数参数时遇到了一个小问题。如果我专门为Hugard的LineChartForm命名函数(如本例中所示),那么代码在加载到F#Interactive解释器中时会按预期工作:F#交互式函数数组,f#,f#-interactive,f#-scripting,F#,F# Interactive,F# Scripting,我试图在post上展开,但在使用数量可变的函数参数时遇到了一个小问题。如果我专门为Hugard的LineChartForm命名函数(如本例中所示),那么代码在加载到F#Interactive解释器中时会按预期工作: (*此代码基于 詹姆斯·胡加德@ https://stackoverflow.com/questions/3276357/how-do-i-plot-a-data-series-in-f *) 模HuggardPlot #r“System.Windows.Forms.DataVis
(*此代码基于
詹姆斯·胡加德@
https://stackoverflow.com/questions/3276357/how-do-i-plot-a-data-series-in-f
*)
模HuggardPlot
#r“System.Windows.Forms.DataVisualization”
打开System.Windows.Forms
open System.Windows.Forms.DataVisualization.Charting
键入LineChartForm(标题、最小值、最大值、func1、func2)=
继承表单(文本=标题)
让图表=新图表(Dock=DockStyle.Fill)
let area=新图表区域(Name=“Area1”)
(*添加第一个绘图Hugard样式*)
let系列=新系列()
是否忽略series.ChartType
do series.ChartArea如果要创建一个采用函数数组params
的方法,则需要将参数定义为[]funcs:(float->float)[
。在您的原始版本中,类型为Object[]
意味着数组的各个元素都是对象-如果您将元素类型更改为函数,那么F#将识别您可以调用它们
然而,如果您只是对绘制F#数据感兴趣,那么WinForms DataVisualization库已经有了一个很好的包装器,名为。还有一个全面的(如果使用最新版本的库,则FSharpChart
已重命名为justChart
)
要创建在指定范围内比较两个函数的绘图,只需编写:
let plotTwoFunctions minX maxX f1 f2 =
Chart.Combine
[ Chart.Line [ for x in minX .. maxX -> x, f1 x ]
Chart.Line [ for x in minX .. maxX -> x, f2 x ] ]
这将创建两个单独的折线图(使用两个函数生成的数据),然后使用chart.Combine
将它们组合成一个图表