簡體   English   中英

具有多個參數Haskell的遞歸函數

[英]Recursive functions with multiple arguments Haskell

一個非常簡單的問題:我想在Haskell中實現2個整數的乘法。 我寫的東西不能編譯:

mult :: Int -> Int -> Int

mult x 1 = x

mult 1 y = y

mult x y = x + (mult x-1 y)

問題是最后一句話。 我嘗試將其編寫為:

mult x y = x + (mult x-1 y)

並且

mult x y = x + (mult(x-1,y))

我得到的錯誤是:

   Couldn't match expected type `Int' with actual type `Int -> Int'
    In the return type of a call of `mult'

我不知道為什么編譯器在明確返回Int -> Int時會說mult返回Int -> Int Int

您必須將x-1放在方括號中! 像這樣

mult x y = x + (mult (x-1) y)

順便說一句,這不會計算x和y的乘法:-)嘗試一些示例……這只是一個小錯誤。

mult x y = x + (mult x-1 y)

括號內的表達式解析為:

(mult x) - (1 y)

因此,編譯器認為(-)的第一個參數是mult x ,這是一個Int -> Int函數,因為僅傳遞了一個參數(而不是兩個)。 相反,您想要:

mult x y = x + mult (x-1) y

這是一個簡單的解析器問題。 當您的意思是mult (x-1) y時,編譯器將mult x-1 y讀為((-) (mult x) y) 函數應用程序在Haskell中的綁定非常緊密,因此有時使用太多的括號而不是太多的括號會更好,特別是在您仍在學習該語言的基礎時。

發生錯誤是因為(mult x)的類型是Int -> Int但是y的類型是Int ,並且您不能減去這兩件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM