这些haskell函数定义之间的区别是什么?

时间:2015-11-26 17:08:36

标签: 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)

1 个答案:

答案 0 :(得分:5)

第二个无法正常工作的原因只是语法无效Haskell。

Guards | x < y ..)不是if的语法替代 - 它们只能在特定的地方使用。例如,你必须像这样使用它们:

mymin [a] = a
mymin (x:y:xs)
  | x < y     = mymin (x:xs)
  | otherwise = mymin (y:xs)

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