Ric*_*isi 2 debugging haskell functional-programming
例如,这是一个功能:
iffthen :: [String] -> Parser String
iffthen a = do
x <- symbol (head a)
y <- booleana (head (tail a))
z <- symbol (head (tail (tail a)))
k <- assignP (head (tail (tail (tail a))))
l <- symbol (head (tail (tail (tail (tail a)))))
m <- assignP (head (tail (tail (tail (tail (tail a))))))
return k
Run Code Online (Sandbox Code Playgroud)
我需要看看每个指令到底做了什么
您可以使用trace :: String -> a -> a的Debug.Trace,或相关的功能,如traceShowId :: Show a => a -> a.该函数基本上打印附加String参数以防函数被评估,并返回函数的结果.
因此,对于某些可以打印的内容,我们可以附加这些trace功能,从而打印信息.请注意,Haskell中的调试通常与命令式语言中的调试不同,主要是由于懒惰:通常不评估函数,除非我们需要结果.这意味着某些函数永远不会被评估,或者在构造该函数之后很久就会对它们进行求值.
在你的功能,我建议在这里使用模式匹配,并删除未使用的变量的噪音:
iffthen :: [String] -> Parser String
iffthen (ifs : cond : thens : val1 : elses : val2 : _) = do
symbol ifs
booleana cond
symbol thens
k <- assignP val1
symbol elses
assignP val2
return kRun Code Online (Sandbox Code Playgroud)
(由于我理解你想要什么correnctly,并且ifs,thens,elses是符号,cond是条件,以及val1和val2是的值if- then- else表达).
最好不要使用列表(因为在编译时不保证元素的数量),因此构造具有特定参数的sperate类型.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |