亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何跨多行在ghci中定義函數?

如何跨多行在ghci中定義函數?

慕村9548890 2019-12-10 13:08:41
我正在嘗試定義任何簡單的函數來跨越ghci中的多行,請以以下示例為例:let abs n | n >= 0 = n          | otherwise = -n到目前為止,我已經嘗試在第一行之后按Enter鍵:Prelude> let abs n | n >= 0 = nPrelude>           | otherwise = -n<interactive>:1:0: parse error on input `|'我也嘗試過使用:{and :}命令,但距離并不遠:Prelude> :{unknown command ':{'use :? for help.我在Linux上使用適用于Haskell 98的GHC Interactive 6.6版,我缺少什么?
查看完整描述

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) }



查看完整回答
反對 回復 2019-12-11
?
有只小跳蛙

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



查看完整回答
反對 回復 2019-12-11
?
料青山看我應如是

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 ()

僅當從文件中粘貼定義(縮進可能會更改)時,這才真正重要。



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 453 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號