私は他のラムダに渡すラムダ式のセットを持っています。すべてのラムダは引数だけに依存しており、外部関数を呼び出すことはありません。もちろん、ときどきかなり混乱し、誤った数の引数を持つ関数を別の関数に渡して、GHCi例外を作成します。Haskellは任意のラムダ式をデバッグします
私は任意のラムダ式(未知数の引数を持つ)をとり、ラムダの構造と関数に基づいて文字列を返すデバッグ関数を作りたいと思います。
例えば、私は、次のラムダ式を持っていると言う:
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)
を返す必要があります
debug s
"\a b c -> a c (b c)"
"\a b -> a b a"
を返す必要があります
さんこれを行う良い方法でしょうか?
実際、Haskellではこの種の情報はコンパイル時に消去されます。テンプレートhaskellを使用して実装することは可能でしょうが、それは簡単ではありません。 – bheklilr
そこにはラムダ計算を実装するための多くのリソースがあります。 [TaPL](http://www.cis.upenn.edu/~bcpierce/tapl/)は、特に優れたものであり、さまざまな洗練されたレベルの計算を実装しています。あなたが演奏できるHackageには、いくらか小さな実装があるようです。 –
Haskellは静的型付けされた言語です。実際にラムダがデカルト閉じられたカテゴリの式を書くのに便利な方法である限り、ラムダの微積分は深く関わっていません。しかし、同等のラムダ式を調べるのではなく、関数が何をするのかを知るために型を直接使うのははるかに生産的です。あなたが達成しようとしているものについては、Schemeのような言語がもっと適しています。 – leftaroundabout