だから私はタイプの2つの引数の関数のリストを持っています[a -> a -> a]
リストを取得して、左側で構成された長さ+1の引数を取得する関数のチェーンに構成する関数を作成したいと思います。たとえば、[f,g,h]
すべてのタイプ[a -> a -> a]
がある場合、次のような関数を作成する必要があります。
chain [f,g,h] = \a b c d -> f ( g ( h a b ) c ) d
また、それが役立つ場合、関数は引数で可換です(つまりf x y = f y x
、すべてに対してx y
)。
問題の関数の数がわかっていれば、リスト内包内でこれを行うことができます。これは、定義とほぼ同じです。それは、固定数の関数から動的な数へのストレッチであり、私は困惑しました。
これは私がこれまでに持っているものです:
f xs = f' xs
where
f' [] = id
f' (x:xs) = \z -> x (f' xs) z
ロジックは正しいパスに沿っていると思います。タイプチェックはしません。
前もって感謝します!