3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
對(duì)于后衛(wèi)(如您的示例),您可以將它們?nèi)糠旁谝恍猩?,這樣就可以工作(后衛(wèi)不在乎間距)
let abs n | n >= 0 = n | otherwise = -n
如果您想使用多個(gè)與參數(shù)匹配的定義來編寫函數(shù),例如:
fact 0 = 1
fact n = n * fact (n-1)
那么您將用大括號(hào)和分號(hào)分隔定義
let { fact 0 = 1 ; fact n = n * fact (n-1) }

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
GHCi現(xiàn)在具有多行輸入模式,已通過:set + m啟用。例如,
Prelude> :set +m
Prelude> let fac 0 = 1
Prelude| fac n = n * fac (n-1)
Prelude|
Prelude> fac 10
3628800

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
丹是正確的,但:{并:}必須在每個(gè)出現(xiàn)在自己的行:
> :{
> let foo a b = a +
> b
> :}
> :t foo
foo :: (Num a) => a -> a -> a
這也與布局規(guī)則交互,因此在使用do表示法時(shí),顯式使用花括號(hào)和分號(hào)可能會(huì)更容易。例如,此定義失?。?/p>
> :{
| let prRev = do
| inp <- getLine
| putStrLn $ reverse inp
| :}
<interactive>:1:18:
The last statement in a 'do' construct must be an expression
但是在添加括號(hào)和分號(hào)時(shí)可以使用:
> :{
| let prRev = do {
| inp <- getLine;
| putStrLn $ reverse inp;
| }
| :}
> :t prRev
prRev :: IO ()
僅當(dāng)從文件中粘貼定義(縮進(jìn)可能會(huì)更改)時(shí),這才真正重要。
添加回答
舉報(bào)