所以我有一个类型的两个参数的函数列表[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
我认为逻辑是正确的,它只是不进行类型检查。
提前致谢!