2017-10-16 4 views
1

GNU APL을 사용하고 있습니다. 또한이 이름이 정확한 이름인지는 모르겠지만 기본 아이디어는 물건의 목록이 있고 각 쌍마다 뭔가를하고 싶다는 것입니다. 그것은 복잡하기 때문에 그것에 대한 함수를 만들었습니다.명명 된 함수로 2 줄입니다.

 2+/1 2 3 4 5 
┌→──────┐ 
│3 5 7 9│ 
└───────┘ 

심지어 같은 일을 할 익명 람다를 사용할 수 있습니다 : 나는 그 함수의 이름을 지정하는 경우에는

 2{⍺+⍵}/1 2 3 4 5 
┌→──────┐ 
│3 5 7 9│ 
└───────┘ 

을, 작동하지 않는 것 나는이 작동하는지주의 사항 :

 ∇R←X FOO Y 
     R←X+Y 
     ∇ 

     2FOO/1 2 3 4 5 
SYNTAX ERROR 
μ-Z__pA_LO_REDUCE_X4_B[3] μ-T←⊂(⊃μ-B3[μ-H;μ-a-μ-M;μ-L])μ-LO⊃μ-T 
         ^^

간격은 다른 효과가없는 것으로 보입니다. 또한 실제로 발생한 오류 메시지와 입력 한 오류 메시지 간의 관계를 볼 수 없기 때문에 진행중인 작업에 대한 통찰력이 도움이 될 것입니다. 감사!

+1

아마도 버그입니다. 나는 GNU를 설치하지 않았지만 dyalog는 나에게 정확한 결과를 주었다. – Uriel

+0

@Uriel은 이것을 표현하는 더 표준적인 방법이 있습니까? 내가 이상하거나 잘못한 일을하고 있니? –

+1

나는 그렇게 생각하지 않는다. 그것은 구문 적으로 ok이며 다른 APL과도 작동합니다. 따라서 필자는이 사실을 구현 버그라고 생각합니다. – Uriel

답변

2

현재의 GNU APL (1.7, svn 1013)에서 작동합니다. 당신이 (FOO와 같은) 정의 된 함수 인수 (같은 /) 원시 연산자를 호출하는 경우

다음 GNU APL이 내장 된 기본 연산자하지만 내장 평가하지 않습니다 : 통찰력에 관한

 ∇r←x foo y 
[1] r←x + y 
[2] ∇ 
     2 foo/1 2 3 4 
3 5 7 
+0

1.7 버전을 사용하고 있지만 원래 작성한 다음 Subversion에서 수정된다는 내용을 편집 했으므로 도움이됩니다. 감사! –

2

매크로에.

사용자가 볼 수있는 매크로 접두어는 내장 매크로의 이름과 사용자 정의 이름을 구별합니다. LO⊃T

그래서

Z__pA_LO_REDUCE_X4_B [3] T ← ⊂ ([]; 고려해 AM L H] ⊃B3)는 조금 더 판독하게 볼 다음 Y- 프리픽스 에러 메시지를 제거하면 (APL 매크로) Z__pA_LO_REDUCE_X4_B의 3 행에 구문 오류가 있습니다. 는 "네임 스페이스"를 사용하는 정의 APL 시스템의 기능을 설정하는 C++ 매크로는) mac_def (: 한마디로

/// reduce N-wise: Z←A LO/[X] B with positive A 
// 
mac_def( Z__pA_LO_REDUCE_X4_B, 
" Z←A1 (LO Z__pA_LO_REDUCE_X4_B) [X4] B;rho_B3;B3;rho_Z;rho_Z3;T;H;M;L;a;N;I;I_max\n" 
" (X4 rho_Z rho_Z3 rho_B3)←X4 ◊ B3←rho_B3⍴B ◊ I_max←⎕IO+⍴I←,⍳⍴Z←(rho_Z3)⍴0 ◊ N←⎕IO\n" 
"LOOPN: (H a L)←⊃I[N] ◊ M←A1+1 ◊ T←B3[H;a-A1;L]\n" 
"LOOPM: T← ⊂(⊃B3[H;a-M;L]) LO ⊃T ◊ →(0≥M←M+1)⍴LOOPM\n" 
"  Z[H;a;L]←T    ◊ →(I_max>N←N+1)⍴LOOPN\n" 
" Z←rho_Z⍴Z\n") 

다음 GNU APL 소스의 소스 파일 Macro.def는 당신에게 전체 이야기를 사용자 정의 이름과 이름 충돌을 피하십시오.

+0

멋진 언더 푸드 답. 내가 아직 이해하지 못하는 한가지가 있습니다 - 왜 macdef 함수에서 문법 오류가 발생했는지 설명해 주시겠습니까? – Uriel

+0

단순히 매크로 자체에 결함이 있었기 때문에 (그 동안 수정되었습니다). 이 오류는 실제로 mac_def (GNU APL의 컴파일 타임에 확장 된 C++ 매크로)에 의해 throw되지 않았습니다. 라인 3 (LOOPM : 라인). GNU APL의 SVN 버전을 알지 못하지만 그 버전을 사용하면 : –

+0

나는 더 잘 설명하려고했지만 5 분 편집 한계에서 여러 번 실패했습니다. –