这些haskell函数定义有什么区别?

Hal*_*God -3 haskell

我真的不明白第二个问题是什么......

--ver1
mymin [a]=a
mymin (x:y:xs) = mymin ((if x < y then x else y):xs)

--ver2
mymin [a]=a
mymin (x:y:xs) = mymin ((
    | x<y  x
    | otherwise  y
):xs)
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 5

第二个不起作用的原因仅仅是语法无效Haskell.

Guards (| x < y ..)没有语法替代if- 它们只在特定的地方工作.例如,你必须像这样使用它们:

mymin [a] = a
mymin (x:y:xs)
  | x < y     = mymin (x:xs)
  | otherwise = mymin (y:xs)
Run Code Online (Sandbox Code Playgroud)

LYAH有一个非常好的解释(寻找卫兵,卫兵!),以防你想了解更多