这意味着错误说的是什么。您指定你的函数的类型是
divideby :: (Int->Int -> Int) -> Int ->float
这意味着,第一个参数必须是一个函数,与该类型Int->Int -> Int
,第二个输入必须是Int
,然后它会产生一个float
。当然,Haskell不知道如何用Int来分割一个函数,这就是你告诉它如何使用表达式f/z
。
回应评论:no。这不是一个更高阶的函数,但它很接近。请看:
addNum :: Int -> Int -> Int
addNum a b = a + b
divideBy :: Int -> Int -> Int -> Int
divideBy a b c = (addNum a b) `div` c
divideBy
是一个函数,它需要3个Int
S作为输入,并产生一个Int
。由于其输入仅为Int
,因此它是而不是的高阶函数。但是,您可以将addNum
的使用抽象为输入,从而使其成为高阶函数。 addNum
具有类型(Int -> Int -> Int)
,所以,除了我们已经投入,我们将尽我们的第一个输入
divideBy :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int
divideBy f a b c = (f a b) `div` c
这的类型是一个高阶函数,也编译正确和有意义。 :)您可以通过addNum
作为此功能的输入。
ghci> divideBy addNum 2 4 6 -- (2 + 4)/6
1
这是正确的吗?这是一个更高阶的函数吗? divideNo :: Int-> Int-> Int addNum a b = a + b divideby :: Int - > Int - > Int-> a divideby a b c =(addNum a b)'div' c} – user1150071 2012-02-05 07:18:08