이 기능적 "패턴"이란 무엇입니까?
-
22-07-2019 - |
문제
나는이 기능의 필요성을 발견했을 때 기능적인 프로그래밍을 속이고 있었지만 표준 명명법에서 이런 종류의 것이 무엇인지 모르겠습니다. 누구든지 그것을 알고 있습니까?
function WhatAmIDoing(args...)
return function()
return args
end
end
편집하다: 기능을 일반화하면 변수의 인수 (또는 암시 적 목록)가 필요하고 호출 할 때 카레 또는 피클과 같은 모든 args를 반환하는 함수를 반환하지만 그럴 수없는 것 같습니다.
해결책
Whatamidoing은 a 고차 기능 다른 함수를 반환하는 함수이기 때문입니다.
그것이 반환되는 것은 a 멍청이 - 실제 값의 계산 지연을 위해 생성 된 폐쇄. 일반적으로 덩어리는 표현을 게으르게 평가하고 (그리고 아마도 그것을 메모 화 할 수 있음), 다른 경우에는 값이없는 대신에 기능이 단순히 필요합니다. "constantly 5
"일부 언어에서는 항상 5를 반환하는 함수를 반환합니다.
후자는 언어가 적용 주문에서 평가한다고 가정하기 때문에 (즉, 함수를 호출하기 전에 인수를 평가 함), 함수는 값을 반환하는 함수로 전환하는 것 외에는 다른 목적을 제공하지 않기 때문에 주어진 예제에 적용될 수 있습니다.
Whatamidoing은 실제로 내가 설명한 "지속적으로"기능의 구현입니다. 하지만 일반적으로 돌아올 필요는 없습니다. args
내부 기능에서. 당신은 돌아올 수 있습니다 "ackermann(args)
",, 그것은 오랜 시간이 걸릴 수 있습니다.
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
그러나 Ackermann 함수의 평가는 폐쇄. (예, 콜별 가치 언어로도.)
다른 팁
기능 프로그래밍에서 다른 함수를 인수로 취하거나 다른 함수를 반환하는 함수는 고차 기능.
나는 xxxx가 반환한다고 말할 것이다 폐쇄 x, y 및 z의 값에 결합 된 이름없는 함수의.
이것 위키 백과 기사는 약간의 빛을 흘릴 수 있습니다
카레 함수를 일련의 함수로 변환하는 것입니다. 각각 하나의 매개 변수 만 가져 가서 다른 기능을 반환합니다. 따라서이 예는 카레와 관련이 없습니다.
소아는 어떤 종류의 직렬화를 나타내는 데 사용되는 용어입니다. 아마도 여러 값으로 구성된 개체를 저장하는 것일 수 있습니다.
당신에게 흥미로운 측면이 반환 된 함수가 XXXX 함수의 인수에 액세스 할 수 있다는 것입니다.
매우 비슷한 것을 호출합니다 constantly
Clojure에서 :
그 기능 만 constantly
반품은 임의의 양의 인수를 취하여 패턴보다 더 일반적 (및 유연)을 만듭니다.
이 패턴이 이름을 가지고 있는지는 모르겠지만 일반적으로 기능이 예상되는 경우에 사용할 것입니다. 그러나 내가 관심을 갖는 것은 특정 값이 반환된다는 것입니다.
(map (constantly 9) [1 2 3])
=> (9 9 9)
그냥 궁금해, 당신은 이것을 무엇으로 사용합니까?
대표?
기본적으로 당신은 함수를 반환하고 있습니까 ?? 아니면 함수의 출력?
이해하지 못했습니다. 죄송합니다 ...