문제

나는이 기능의 필요성을 발견했을 때 기능적인 프로그래밍을 속이고 있었지만 표준 명명법에서 이런 종류의 것이 무엇인지 모르겠습니다. 누구든지 그것을 알고 있습니까?

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 함수의 인수에 액세스 할 수 있다는 것입니다.

다른 사람들이 말했듯이, 그것은 a입니다 고차 기능. 귀하의 질문에 "패턴"이 있으므로 기능 언어 의이 기능이 종종 전략 패턴 고차 기능이없는 언어로.

매우 비슷한 것을 호출합니다 constantly Clojure에서 :

http://github.com/richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#l1096

그 기능 만 constantly 반품은 임의의 양의 인수를 취하여 패턴보다 더 일반적 (및 유연)을 만듭니다.

이 패턴이 이름을 가지고 있는지는 모르겠지만 일반적으로 기능이 예상되는 경우에 사용할 것입니다. 그러나 내가 관심을 갖는 것은 특정 값이 반환된다는 것입니다.

(map (constantly 9) [1 2 3])
=> (9 9 9) 

그냥 궁금해, 당신은 이것을 무엇으로 사용합니까?

대표?

기본적으로 당신은 함수를 반환하고 있습니까 ?? 아니면 함수의 출력?

이해하지 못했습니다. 죄송합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top