Haskell的函数连接问题

问题描述 投票:1回答:1

我定义了以下函数addtofour。

addtofour :: Int -> Int
addtofour x = 4 + x

当我把这个函数加载到ghci中时,它可以正常工作。然而,当我试图将它与LogBase返回的值连接起来时,它却无法工作。

我试过了。

logbase 2 3 -- returns 1.58..
addtofour logBase 2 3 -- error, expected 1.58 + 4 = 5.58
addtofour (logBase 2 3) -- error, expected 1.58 + 4 = 5.58

我希望logBase 2 3能返回一个Int,然后我可以把它放到我的addtofour函数中。但不知为何会失败。我猜这与我的addtofour函数的域有关。f(x) = 4+x does Int -> Int

haskell ghci
1个回答
4
投票

logBase 的时候,返回的是 1.58,这不是一个 Int. 您的 addtofour 函数只接受 Ints. 你可以通过使类型的 addtofour 通用。

addtofour :: Num a => a -> a

但你的第二个案例还是会失败

addtofour logBase 2 3

这是因为它试图通过 logBase 作为对 addtofour. 你要么需要用括号来明确应用的顺序。

addtofour (logBase 2 3)

或者是 ($) 运算符,具有优先权。

addtofour $ logBase 2 3
© www.soinside.com 2019 - 2024. All rights reserved.