這意味着錯誤說的是什麼。您指定你的函數的類型是
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