HOF, 그 인수가 때로 믿을 수 있기 때문에 plusc
내가하고자하지 개인적으로 전화 첨가을 의미하는지 이해하지 않는다 기능이 없습니다. 함수가 HOF가 아님을 우리가 선택 괄호를 제거하면
{- equivalent signature -}
plusc :: Num a => a -> a -> a
, 그것은 분명하다 : 명백한 HOF를 발견 할 수있는 방법이 가 왼쪽 측면에없는 것을 서명에 괄호을 찾는 것입니다 그것은 기능을 필요로하지만, 그것은 카레입니다.
참고 : 모든 카레 기능 반환 함수는하지만, 우리가 부분적으로 적용한 후,이 함수를 반환하고, 같은 기능에서 작동 말할 수 수 있기 때문에 - 그래서이 HOF입니다. 이것은 개념을 설명/학습하는 데 특히 도움이되는 방법이라고 생각하지 않지만 정의가 매개 변수와 결과 모두에 걸쳐 있다고 가정합니다.
단순히 그룹 인수 것 인 uncurried 버전 :
plusUnc :: Num a => (a, a) -> a
는 이제 HOF가 같은 기능을 가지고 다른 사람으로 바꿀 수 있습니다
imu :: Num a => (a -> a -> a) -> (a -> a -> a)
imu f = \a b -> f a b
주 : 람다 임프란트는 분명히 단순화 될 수 있었고, 단지 삽화를 위해 철자를 썼다.
f
은 imu
에 전달되는 "하위"차수 기능입니다. 이 기능을 사용하려면
imuPlus = imu plusc -- a function is being passed
imuPlus 1 2 -- == 3
참고 : 우리는 두 개념을 혼합하고 (당신이 모두 요구) 때문에, imu
도 카레된다.
imuUnc :: ((a -> a -> a), (a, a)) -> a
가 지금은 HOF (이 매개 변수의 기능을 가지고있다)이지만, 위의 예와 다른 기능을 반환하지 않습니다 :는 uncurried 버전은 다음과 같을 수 있습니다. 그러나 부분적으로 적용되기 때문에 카레를 칠할 때 훨씬 쉽게 사용할 수 있습니다.
전체 범위로?나는 정확히 무엇을 요구하고 있는지, 어떤 부분을 이해하지 못하는지 모르겠습니다. – Bergi
글쎄,이 함수가 어떻게 추가를 의미하는지 이해할 수 없다. 어느 정도까지 함수 정의 *가 더하기를 정의합니다. –
덧셈은'+'연산자로 정의되며,'plusc'가 사용합니다. 어쩌면'plusc xy = x + y' 나'plusc = \ x -> \ y -> x + y' ('x + y' ='(+) xy') – Bergi