调试Haskell

KMC*_*KMC 1 debugging haskell functional-programming

我是函数式编程的新手,我想调试一个递归函数,看看为什么我得到特定的值作为返回值.我该如何做到这一点?我在这个网站和网上都找到了一些答案,但我无法理解这样做的想法.任何帮助,将不胜感激.

recur = \a -> if a>100 then  a-10 else recur (recur (a+11))
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 7

你可以这样做(使用Debug.Trace):

import Debug.Trace (trace)

recur a | trace ("recur " ++ show a) False = undefined
recur a = if a>100 then  a-10 else recur (recur (a+11))
Run Code Online (Sandbox Code Playgroud)

每次recur调用函数时都会产生输出(或者更确切地说,因为Haskell是惰性的,每次recur需要应用的结果时).

样本输出(以ghci为单位):

*Main> recur 99
recur 99
recur 110
recur 100
recur 111
recur 101
91
Run Code Online (Sandbox Code Playgroud)