Haskell,顺序程序流?

4

对不起,这可能是一个非常奇怪的问题。我在Haskell中的所有经验都是编写通常以递归形式进行进展的函数(每次迭代一些数据元素会减少)。但是,我有一组函数,每个函数都对一些数据进行处理,我希望我的调用方法包含每个阶段,例如:

(伪代码)

myFunc1 :: Something1 -> Something2

execute myFunc1 Something1
.
execute myFunc2
.
execute myFunc3
.
execute myFunc4
.

return Something2

但我不确定这是否可能?我是否只需要像下面这样添加一些荒谬的东西: myFunc4(myFunc3(myFunc2(MyFunc1(Something1))))?编辑:上面的代码行肯定是不正确的!
2个回答

8
使用函数调用运算符$
myFunc4 $ myFunc3 $ myFunc2 $ myFunc1 $ Something1

或者函数组合:

myFunc4 . myFunc3 . myFunc2 . myFunc1 $ Something1

或者使用let:
let x = myFunc1 Something1 in
let y = myFunc2 x in
let z = myFunc3 y in
myFunc4 z

2
或者,更通俗地说(由于未知的原因,可能仅仅是看起来更好): myFunc4 . myFunc3 . myFunc2 . myFunc1 $ Something1 - luqui
1
或者使用组合操作符(.)myFunc4 . myFunc3 . myFunc2 . myFunc1 $ Something1。我真是个打字太慢的人! - Daniel Fischer
如果myfunc2只在一个条件(IF)语句的情况下发生,会怎么样? - user997112
使用 let 结合 if-then-else,或定义一个自定义组合器。或将条件逻辑放在函数内部。 - Fred Foo

3

如果您想保持从左到右的阅读顺序,可以定义

(.>) = flip (.) -- are those in standard library somewhere?
($>) = flip ($)

myComplex = Something1 $> myFunc1 .> myFunc2 .> myFunc3 .> myFunc4

谢谢!那正是我在寻找的! - rpax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接