use*_*598 -1 haskell functional-programming guard-statement
我是Haskell的新手,如果几个布尔值为true,我将尝试执行多个语句。我使用了警卫队尝试了它,但它只执行了第一条正确的语句,然后停止了。我希望它执行所有正确的示例,例如f 5执行gx,然后还执行h x。我尝试使用if语句,但不能。
f x
| x < 10 = g x
| x < 15 = h x
| otherwise = m x
Run Code Online (Sandbox Code Playgroud)
这只是一个简化,实际上我有一个不同的程序。情况不同,我只是想像其他编程语言一样具有多个if语句。因此,在此示例中,如果x <10,则执行某项操作;如果x <15,则也执行此操作。
在纯函数式编程中,我们不像在命令式编程中那样执行语句。没有“先做然后做”的概念。相反,我们主要编写一些函数,这些函数将一些参数作为输入,并返回一些输出。
如果我们确实想与世界互动而不只是计算返回值怎么办?好吧,在这种情况下,我们求助于IO monad。请注意,这不是我们经常执行的操作-我们希望尽可能避免IO monad,以便使大多数计算保持纯净。
这是一个例子:
f :: Int -> IO ()
f x = do
putStrLn "hello"
if x > 15
then putStrLn "> 15"
else putStrLn "not > 15"
if x > 10
then putStrLn "> 10"
else putStrLn "not > 10"
Run Code Online (Sandbox Code Playgroud)
如果您是初学者,建议您在使用IO monad之前先学习Haskell基础知识。在任何地方使用IO monad都会导致代码非常单一。
大多数学习FP的命令式程序员都试图将以前的习惯变成FP语言-这是很常见的。但是,带有副作用和可变变量的编程不能很好地应对FP。人们逐渐需要停止根据有效的陈述进行思考,而要重新思考大脑,以便根据价值和(通常是递归)定义进行思考。
请注意,FP在这方面并不特殊。如果一个人首先用Haskell讲过纯正的FP,然后又使用任何命令式编程语言,他们可能会问这样的想法:“我如何使用状态monad?”。即使您可以在-say- Java中使用状态monad,这也很愚蠢,因为使用可变变量会更加自然。同样,编程人员试图将他们以前的方法塞入新的语言/范例中,忽略新功能,并生成唯一的代码。