3 回答
TA贡献1785条经验 获得超4个赞
对于后卫(如您的示例),您可以将它们全部放在一行上,这样就可以工作(后卫不在乎间距)
let abs n | n >= 0 = n | otherwise = -n
如果您想使用多个与参数匹配的定义来编写函数,例如:
fact 0 = 1
fact n = n * fact (n-1)
那么您将用大括号和分号分隔定义
let { fact 0 = 1 ; fact n = n * fact (n-1) }
TA贡献1824条经验 获得超8个赞
GHCi现在具有多行输入模式,已通过:set + m启用。例如,
Prelude> :set +m
Prelude> let fac 0 = 1
Prelude| fac n = n * fac (n-1)
Prelude|
Prelude> fac 10
3628800
TA贡献1772条经验 获得超8个赞
丹是正确的,但:{并:}必须在每个出现在自己的行:
> :{
> let foo a b = a +
> b
> :}
> :t foo
foo :: (Num a) => a -> a -> a
这也与布局规则交互,因此在使用do表示法时,显式使用花括号和分号可能会更容易。例如,此定义失败:
> :{
| let prRev = do
| inp <- getLine
| putStrLn $ reverse inp
| :}
<interactive>:1:18:
The last statement in a 'do' construct must be an expression
但是在添加括号和分号时可以使用:
> :{
| let prRev = do {
| inp <- getLine;
| putStrLn $ reverse inp;
| }
| :}
> :t prRev
prRev :: IO ()
仅当从文件中粘贴定义(缩进可能会更改)时,这才真正重要。
- 3 回答
- 0 关注
- 411 浏览
添加回答
举报