gpt4 book ai didi

debugging - Haskell 支持调试吗?

转载 作者:行者123 更新时间:2023-12-02 11:29:19 24 4
gpt4 key购买 nike

例如,这是一个函数:

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

我需要看看每条指令到底做了什么

最佳答案

您可以使用trace :: String -> a -> a Debug.Trace 或相关函数,如 traceShowId :: Show a => a -> a 。该函数基本上会在函数被求值时打印附加的String参数,并返回函数的结果。

因此,对于某些可以打印的内容,我们可以附加这样的trace函数,从而打印信息。请注意,Haskell 中的调试通常与命令式语言中的调试不同,主要是由于惰性:通常不会评估函数,除非我们需要结果。因此,这意味着某些函数永远不会被求值,或者这些函数在我们构造该函数很久之后才会被求值。

关于你的函数,我建议在这里使用模式匹配,并消除未使用变量的噪音:

iffthen :: [String] -> Parser String
iffthen <b>(ifs : cond : thens : val1 : elses : val2 : _)</b> = do
symbol <b>ifs</b>
booleana <b>cond</b>
symbol <b>thens</b>
k <- assignP <b>val1</b>
symbol <b>elses</b>
assignP <b>val2</b>
return k

(鉴于我正确解释了您想要的内容,并且 ifsthenselses 是符号,cond是条件,val1val2if-then-else<的值 表达式)。

最好不要使用列表(因为在编译时无法保证元素数量),从而构造具有特定参数的单独类型。

关于debugging - Haskell 支持调试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50527831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com