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表示法時,顯式使用花括號和分號可能會更容易。例如,此定義失?。?/p>
> :{
| 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 關注
- 453 瀏覽
添加回答
舉報