定义Haskell函数的一种经典方式是:
f1 :: String -> Int
f1 ('-' : cs) -> f1 cs + 1
f1 _ = 0
我有点不满意每行都写函数名。现在我通常使用模式匹配扩展来编写以下方式,认为这更易读且更易修改:
f2 :: String -> Int
f2 s
| '-' : cs <- s = f2 cs + 1
| otherwise = 0
您认为第二个示例更易读、易修改和优雅吗?生成的代码呢?(抱歉,还没有时间查看去糖化输出!)缺点是什么?我唯一看到的就是扩展使用。
f2
中,您需要为每个模式重复<- s
部分。这取决于您的喜好。 - is7sf 0 _ = []; f _ [] = []; f n (x:xs) = f (n-1) xs
- demi