在Haskell情况下如何使用“

在Haskell情况下如何使用“,haskell,syntax,conditional-statements,Haskell,Syntax,Conditional Statements,因此,我尝试使用case表达式和if-else生成一个递归阶乘函数,尽管我不知道如何编写,但您可以使用保护,例如: factorial x | x < 0 = -1 factorial 0 = 0 -- ⋮ 或者我们可以在案例陈述中添加这些保护,如下所示: 或者您可以使用: 您可以使用防护装置,例如: factorial x | x < 0 = -1 factorial 0 = 0 -- ⋮ 或者我们可以在案例陈述中添加这些保护,如下所示: 或者您

因此,我尝试使用case表达式和if-else生成一个递归阶乘函数,尽管我不知道如何编写,但您可以使用保护,例如:

factorial x
  | x < 0 = -1
factorial 0 = 0
-- ⋮
或者我们可以在案例陈述中添加这些保护,如下所示:

或者您可以使用:


您可以使用防护装置,例如:

factorial x
  | x < 0 = -1
factorial 0 = 0
-- ⋮
或者我们可以在案例陈述中添加这些保护,如下所示:

或者您可以使用:

case接受一个任意表达式,而不仅仅是一个变量,所以您可以编写如下内容

factorial x = case compare x 0 of
               LT -> -1
               EQ -> 1
               GT -> ...
case接受一个任意表达式,而不仅仅是一个变量,所以您可以编写如下内容

factorial x = case compare x 0 of
               LT -> -1
               EQ -> 1
               GT -> ...

在某种情况下,您使用的是模式而不是条件。如果x<0,可以试试吗?@n.“代词是m。”。编辑器告诉我在第一个'->'@m3k_1上有一个解析错误:它是x的情况,而不是x的情况,但您不能直接使用条件,您将需要保护或模式匹配视图模式。在这种情况下,您使用的是模式而不是条件。如果x<0,可以试试吗?@n.“代词是m。”。编辑器告诉我在第一个'->'@m3k_1上有一个解析错误:它是的case x of,而不是x的case of,但您不能直接使用条件,您将需要防护,或与视图模式匹配的模式。如图所示,case表达式中不支持防护吗?@DanD.:是的。不知何故,我觉得它有点难看,因为我们使用了四次x变量:一次在函数定义的头部,一次在案例中。。。当然,一个在模式中,一个在保护中。写case x<0 of True->的非常复杂的方法。。。或者如果x<0,则….:在如图所示的大小写表达式中不支持卫士吗?@DanD.:是的。不知何故,我觉得它有点难看,因为我们使用了四次x变量:一次在函数定义的头部,一次在案例中。。。当然,一个在模式中,一个在保护中。写case x<0 of True->的非常复杂的方法。。。或者如果x<0,则….:
factorial x = case compare x 0 of
               LT -> -1
               EQ -> 1
               GT -> ...