【发布时间】:2011-12-08 17:45:24
【问题描述】:
所以我有一个[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
我认为逻辑是正确的,只是没有进行类型检查。
提前致谢!
【问题讨论】:
-
它不进行类型检查,因为它不可能进行类型检查。尝试用带有列表的函数替换带有未知数量参数的函数。这就是列表的用途,用来保存未知数量的类似类型的东西。
标签: haskell function-composition