정확하게 오류의 의미입니다. 당신은 당신의 기능 유형이
의미
divideby :: (Int->Int -> Int) -> Int ->float
는 첫 번째 인수는 유형 Int->Int -> Int
와 함수해야이라고 규정 한 두 번째 입력은 Int
해야하며, 다음은 float
를 생성합니다. 당연히, Haskell은 함수를 Int로 나눌 방법을 모른다. 이것은 당신이 식을 사용하여 그것을 말하고있는 것이다.
댓글에 대한 응답으로 : 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
의 소요 및 Int
을 생성하는 함수이다. 그 입력은 단지 Int
이기 때문에 이 아니고 고차 함수 인이 아닙니다. 그러나 addNum
의 사용을 입력으로 추상화하여 고차 함수로 만들 수 있습니다. addNum
우리가 이미 가지고있는 입력에 더하여, 우리는 우리의 첫 번째 입력
divideBy :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int
divideBy f a b c = (f a b) `div` c
이의 종류는 제대로 컴파일하고 의미가 고차 기능이라고 할 것입니다, (Int -> Int -> Int)
입력이 있으므로 . :) addNum
을이 함수의 입력으로 전달할 수 있습니다.
ghci> divideBy addNum 2 4 6 -- (2 + 4)/6
1
이 정확한가요? 이것은 고차 함수입니까? {addNum :: Int-> Int-> Int addNum a b = a + b divideby :: Int-> Int-> Int-> a divideby a b c = (addNum a b)'div' c} – user1150071