문제

인수로서 기능을 어떻게 전달합니까?

기본 아이디어는 다음과 같은 것입니다 (작동하지 않음).

∇R ← double a
R ← 2 × a
∇

∇R ← a applytwice f
R ← f f a
∇

5 applytwice double

같은 것이 있습니까? \fun C의 Erlang 또는 함수 포인터에서?

도움이 되었습니까?

해결책

APL에서 함수는 기능에 대한 인수로 전달되지 않을 수 있습니다. 그러나 APL에는 인수로 기능을 취할 수있는 더 높은 차수 기능 인 연산자가 있습니다. 예를 들어 벡터 + / v를 요약하는 데 사용되는 / (축소)와 같은 원시 연산자가 있습니다. 함수 +는 왼쪽 피연산자이며 연산자 /로 전달됩니다.

Dyalog APL에는 ( "Power")를 사용하여 기능 N 시간을 적용하기 위해 원시 연산자가 있습니다.

      double←{2×⍵}
      (double ⍣ 2) 7
28
      (double ⍣ 10) 7
7168

대부분의 APL에서 자신의 연산자를 쓸 수도 있습니다. Dyalog APL에서는 ApplyTwice 연산자를 다음과 같이 쓸 수 있습니다.

     applytwice←{⍺⍺ ⍺⍺ ⍵}
     double applytwice 7
28

마지막으로 네임 스페이스에 넣고 네임 스페이스를 대신 전달하여 기능을 전달할 수 있습니다. 이것은 방법이있는 매우 가벼운 클래스 인스턴스와 같습니다. 예를 들어:

       s←⎕NS ''
       s.f←{2×⍵}
       ApplyFTwice←{⍺.f ⍺.f ⍵}
       s ApplyFTwice 7
28

이 경우 함수의 이름이 F라는 이름을 지정해야하지만 각각 자체 네임 스페이스에서 F라는 많은 다른 기능을 할 수 있습니다.

다른 팁

당신의 applytwice는 그리 멀지 않았습니다. Dyalog APL 및 아마도 다른 사람들에서 비 DFN (레거시 함수 정의) 코드는 다음과 같이 보입니다.

       ∇ R ← (f applytwice) a
  [1]   R ← f f a
       ∇

       - applytwice 42
  42

       {2×⍵} applytwice 42
  168

APL에서는 0, 1 또는 두 개의 데이터 인수를 받아들이는 "프로그램"은 "함수"입니다. + 등과 같은 내장 함수를 "원시 함수"라고 할 수 있습니다. 예제의 이중 함수는 "정의 된 함수"입니다. "연산자"는 기능과 데이터를 인수로 받아들입니다. + / 및 +는 축소 및 스캔 연산자의 예입니다. +는 / 또는 연산자의 함수 왼쪽 인수입니다. 대조적으로, 압축 및 확장 함수는 동일한 기호 (/ 및 )를 사용하지만 왼쪽 데이터 인수가 있습니다.

APL 명명법입니다.

당신은 또한 이것을 둘러 볼 수 있습니다 인용. char 배열을 전달한 다음 함수 내에서 실행할 수 있습니다. 이 문자열에는 정의 된 함수 또는 직접 정의의 이름이 포함될 수 있습니다.

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