F#交互式函数数组

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

我试图在post上展开,但在使用数量可变的函数参数时遇到了一个小问题。如果我专门为Hugard的LineChartForm命名函数(如本例中所示),那么代码在加载到F#Interactive解释器中时会按预期工作:

(*此代码基于
詹姆斯·胡加德@
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
已重命名为just
Chart

要创建在指定范围内比较两个函数的绘图,只需编写:

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
将它们组合成一个图表