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

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

GHCi中的多行命令

GHCi中的多行命令

慕沐林林 2019-12-21 11:31:47
我在ghci中輸入多行命令時遇到問題。以下兩行代碼可從文件運行:addTwo :: Int -> Int -> IntaddTwo x y = x + y但是當我輸入ghci時,出現錯誤:<interactive>:1:1: error:    Variable not in scope: addTwo :: Int -> Int -> Int我也嘗試將代碼放入:{ ... :},但它們也不適用于本示例,因為這只是將行追加到一行中,事實并非如此。我正在使用WinGHCi,版本2011.2.0.1
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

大多數時候,您可以依靠類型推斷來為您確定簽名。在您的示例中,以下足夠了:


Prelude> let addTwo x y = x + y

如果您確實想要帶有類型簽名的定義,或者您的定義跨越多行,則可以在ghci中執行以下操作:


Prelude> :{

Prelude| let addTwo :: Int -> Int -> Int

Prelude|     addTwo x y = x + y 

Prelude| :}

Prelude> addTwo 4 7

11

請注意,您也可以將其壓縮到一行:


Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y

您可以在文檔提示部分的“ 交互評估”中找到有關與ghci交互的更多信息。


查看完整回答
反對 回復 2019-12-21
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

通過啟動GHCI并輸入:set +m以下命令來解決此問題:


Prelude> :set +m

Prelude> let addTwo :: Int -> Int -> Int

Prelude|     addTwo x y = x + y

Prelude| 

Prelude> addTwo 1 3

4

繁榮。


這里發生的事情(我主要是在和您聊天,在通過“ 了解您的Haskell”工作時,正在谷歌上尋求幫助的人)是GHCI是一個交互式環境,您可以在其中動態更改函數名稱的綁定。您必須將函數定義包裝在一個let塊中,以便Haskell知道您將要定義一些內容。這些:set +m東西是多行:{ 代碼 :}構造的簡寫。


空格在塊中也很重要,因此您必須在類型定義之后縮進四個空格,以說明函數中的四個空格let。


查看完整回答
反對 回復 2019-12-21
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

從GHCI版本8.0.1開始,let不再需要在REPL上定義功能。


因此,這應該適合您:


λ: addTwo x y = x + y

λ: addTwo 1 2

3

λ: :t addTwo

addTwo :: Num a => a -> a -> a

Haskell的類型推斷提供了適用于浮點數的通用類型化:


λ: addTwo 2.0 1.0

3.0

如果您必須提供自己的鍵入內容,則似乎需要let結合使用多行輸入(用于:set +m在GHCI中啟用多行輸入):


λ: let addTwo :: Int -> Int -> Int

 |     addTwo x y = x + y

 | 

λ: addTwo 1 2

3

但是,如果Int由于非多態輸入而嘗試傳遞除a以外的任何內容,則會出現錯誤:


λ: addTwo 2.0 1.0


<interactive>:34:8: error:

    ? No instance for (Fractional Int) arising from the literal ‘2.0’

    ? In the first argument of ‘addTwo’, namely ‘2.0’

      In the expression: addTwo 2.0 1.0

      In an equation for ‘it’: it = addTwo 2.0 1.0


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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