例子:
你有一个纯函数,它可能会给你错误的结果。
fib::Int->Intfib n | n<2=n|否则=fib(n-1)-fib(n-2)
>>>
图3
0
插入对的呼叫traceFunction(跟踪功能)
以帮助调试。
fib,fib'::Int->Intfib=traceFunction“fib”fib'fib'n|n<2=n|否则=fib(n-1)-fib(n-2)
现在,对纯函数的调用将提供其参数和结果作为调试信息。
>>>
图3
fib 1=1fib 0=0fib 2=1fib 1=1fib 3=00
希望这能帮助你了解你的bug。
请注意traceFunction(跟踪功能)
使用多个参数的函数。。。
traceElem::等式a=>a->[a]->BooltraceElem=traceFunction“elem”元素
……“功能”完全没有参数。
alpha=traceFunction“精细结构常数”$e*e*c*mu0/2/h
参数和结果必须实现显示
类型类。作为特殊情况,参数可能是函数和显示为下划线(_
).
>>>
:set-XNoMonomorphism限制
>>>
let map’=traceFunction“map”映射
>>>
地图'(2*)[1..3]
映射[1,2,3]=[2,4,6][2,4,6]
已知缺陷:生成的函数是严格的,即使输入函数在其部分中是非严格的参数。特别地,