我有一個項目讓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