(->)
Haskell でアローの階乗を書きたいと思います。再帰を に変換する方法がわかりませんloop
。loop
階乗の修正点を作成するために使用できましたが、ラムダ抽象化に問題があり、翻訳できません。
loop f b = let (d, c) = f (d, b) in c
g = \(f, x) -> (\x -> if x == 0 then 1 else x * f (x - 1), f x)
main = print $ loop g 5
ストリームを変換する別の矢印で階乗を書くことに関する記事があります: [a] -> [b]
、しかしそれは私が興味を持っているケースではありません.私が探しているのはそのようなものです.
(->)
階乗を矢印で書くにはどうすればよいですか?