【发布时间】:2014-04-21 23:10:47
【问题描述】:
一个非常简单的问题:我想在 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'
我不知道为什么编译器会说 mult 返回一个 Int -> Int,而它显然返回一个 Int。
【问题讨论】:
-
当您将
mult应用于一个参数时,例如mult 5,您会得到Int -> Int类型的东西,因为您已将其部分应用于一个参数。很明显,你有mult 5 :: Int -> Int。这与您现在遇到的问题完全无关,但我认为它可能对未来有用,如果不是现在的话。如果现在感到困惑,请忽略它直到以后,不要担心。
标签: haskell recursion multiplication