我有一組lambda表達式,我將其傳遞給其他lambda表達式。所有的lambda只依賴於他們的論點,他們不會調用任何外部函數。當然,有時候它會讓人感到困惑,我會通過不正確的參數數量傳遞給另一個參數,從而創建一個GHCi異常。Haskell調試任意的lambda表達式
我想製作一個調試函數,它將採用任意lambda表達式(帶有未知數量的參數)並根據lambda的結構和函數返回一個字符串。
例如,假設我有以下lambda表達式:
i = \x -> x
k = \x y -> x
s = \x y z -> x z (y z)
debug (s k)
應該返回"\a b -> b"
debug (s s k)
應該返回"\a b -> a b a"
(如果我簡化是正確的)
debug s
應該返回"\a b c -> a c (b c)"
Wha噸會是這樣做的好方法?
不是真的在Haskell中,這種信息在編譯時被擦除。你可以使用模板haskell來實現它,但這並不簡單。 – bheklilr
在那裏實現lambda演算有很多資源。 [TaPL](http://www.cis.upenn.edu/~bcpierce/tapl/)是一個特別好的項目,並且包括各種複雜程度的結石的實現。在Hackage上似乎也有一些小的實現,你可以使用它。 –
Haskell是一種靜態類型語言。其實並不是深度涉及lambda微積分,除非lambda恰好是寫笛卡爾封閉類別表達式的有用方式。但直接使用類型來了解函數的作用,而不是查看一些等效的lambda表達式會更有效率。對於你想要達到的目標,像Scheme這樣的語言會更合適。 – leftaroundabout