Haskell链函数基于不同的条件

时间:2014-10-28 16:27:15

标签: function haskell chain

当链接函数应用于一个参数时,是否有一种有效/简单的方法,只应用满足其要求的函数才能应用? E.g:

我有一个论点' Obj'和3个函数:func1,func2,func3。每个都有自己的要求,需要满足这些要求,以便将函数应用于参数。例如。伪代码:

(if condition1 then func1) . (if condition2 then func2) . (if condition3 then func3) Obj

因此,如果所有条件都合格,则所有3个函数都将应用于Obj。

有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:6)

首先,您在$之前缺少Obj。我想在回答你的问题时,你只需要提供一个else条款:

(if c0 then f0 else id) $ (if c1 then f1 else id) $ (if c2 then f2 else id) $ arg

答案 1 :(得分:2)

您可以按如下方式定义链中的功能列表

let fChain = [f1 | cond1] ++ [f2 | cond2] ++ ....

然后像这样评估列表

let result = fChain `apply` value

,其中

apply = foldl (.) id

当然,每个fn的类型必须是(a->a)(因为对于condn==False,我们会替换id