我正在通过Project Euler学习F#的绳索,并且几次遇到以下问题。我写了一个函数,在F#交互窗口中运行它,程序挂在那里。我怀疑函数失败,但我没有得到任何重大的错误信息,这将帮助我找出错误。有什么方法可以调试在F#交互中运行的程序吗?
作为一个例子,下面是来自问题12的一个例子。FindFirstTriangle(0,0,100)运行正常,但当除数约为150时,事情就会卡住。
注意:这不是关于这段代码的错误,而是关于如何找出错误的地方!如何诊断F#交互式故障的来源
let NumberOfDivisors n =
[1 .. n] |> List.filter (fun i -> n % i = 0) |> List.length;;
let HasMoreThanDDivisors n d =
if NumberOfDivisors n >= d then
true
else
false
let rec FindFirstTriangle (index, number, divisors) =
if HasMoreThanDDivisors number divisors then
number
else
let nextIndex = index + 1
let nextNumber = number + index
FindFirstTriangle (nextIndex, nextNumber, divisors);;
感谢布赖恩。 Big-O很清晰,我知道我的算法效率很低,但我不确定问题是性能不佳还是发生异常。我认为,性能是责备:) – Mathias 2010-03-02 01:09:35
是的,如果有例外,你会得到反馈 - 尝试它(在某处添加一个“raise(new Exception(”boom“)),看看Interactive如何表现)。 – Brian 2010-03-02 01:11:54
另外,从您的答案中,我认为在Interactive中运行时,没有办法使用类似断点或监视的东西? – Mathias 2010-03-02 01:20:45