我有一个项目让Uni编写一个编译器(在Haskell中),用于编写一个简单的命令式语言。其中一个要求是在输入函数调用时打印调试语句,留下一个函数并分配变量。Haskell - 执行后打印跟踪
打印邮件时输入的功能很简单,我只是用Debug.trace,如:
functionValue = trace "Entering function" (evaluateFunction functionArguments)
同样的过程分配给变量时适用。我无法弄清楚的是如何从函数调用返回时打印,并使输出与其他输出的时间正确。到目前为止,我所做的每一次尝试都导致在“输入函数”后立即打印“离开函数” - 我需要在打印“离开函数”之前打印函数的内部调试语句(分配和嵌套函数调用)。
我的迫切习惯告诉我,我需要一种方法来在离开函数输出之前强制执行(evaluateFunction functionArguments),但这在Haskell中似乎是不可能和错误的。
示例输出我现在得到:
Entering main function...
Leaving main function...
Entering fn1 function...
Leaving fn1 function...
Assigning value1 to A.
Assigning value2 to C.
Entering fn2 function...
Leaving fn2 function...
Assigning value3 to B.
Assigning value4 to C.
同一个程序的输出我需要它的样子:
Entering main function...
Entering fn1 function...
Assigning value1 to A.
Leaving fn1 function...
Assigning value2 to C.
Entering fn2 function...
Assigning value3 to B.
Assigning value4 to C.
Leaving fn2 function...
Leaving main function...
那么,什么是Haskell的成语为 '运行myFunctionWithTraces然后打印的myString'?
由于您需要保证消息按特定顺序打印,因此不应使用Debug.Trace。相反,咬一口,运行IO,并使用'putStrLn'或类似的东西。 – dave4420 2012-04-15 08:33:23
你在编译Haskell吗? – 2012-04-15 08:42:47