매일 함수형 프로그래밍에 대한 기사를 읽고 가능한 한 많은 연습을 적용하려고했습니다. 그러나 나는 카레 또는 부분 적용의 독특한 점을 이해하지 못합니다.
이 Groovy 코드를 예로 들어 보겠습니다.
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
나는 사이의 차이점이 무엇인지 이해가 안 tripler1
와 tripler2
. 둘 다 같지 않습니까? '커링'은 Groovy, Scala, Haskell 등과 같은 순수하거나 부분적인 기능 언어로 지원됩니다. 그러나 단순히 이름이 있거나 익명 인 다른 이름을 만들어서 동일한 작업 (왼쪽 카레, 오른쪽 카레, n- 카레 또는 부분 응용 프로그램)을 수행 할 수 있습니다. tripler2
대부분의 언어 (예 : C)에서 매개 변수를 원래 기능 (예 :)으로 전달하는
여기에 뭔가 빠졌습니까? Grails 애플리케이션에 카레 링 및 부분 애플리케이션을 사용할 수있는 곳이 있지만, "어떻게 다른가요?"라는 질문을하기 때문에 주저하고 있습니다.
제발 깨달아 줘
편집 : 기본 응용 프로그램을 원래 함수로 전달하는 다른 함수를 작성 / 호출하는 것보다 부분 응용 프로그램 / 커링이 더 효율적이라고 말하는가?
f x y = x + y
이는 f
하나의 int 매개 변수를 취하는 함수임을 의미합니다 . f x
(에 f
적용됨 x
) 의 결과 는 하나의 int 매개 변수를 사용하는 함수입니다. 결과 f x y
(또는 (f x) y
에 f x
적용됨 y
)는 입력 매개 변수를 사용하지 않고 축소하여 평가하는 식입니다 x + y
.