В первом примере используется обычная нотация APL «del» для определения функции. Во втором двух примере используется прямое определение (обычно известное как DFNS - произносится Dee -Funs), которое является расширением Dyalog APL, и, очевидно, не работает в используемом интерпретаторе. Простота определения функций таким образом является большим преимуществом.
Вопрос
Я использую GNU APL 1.1 (svn 4460)
на Linux 2.6.32
И у меня есть некоторые проблемы с определениями функций.
Этот фрагмент работает, как и ожидалось:
∇R←ODD N
R←2|N
∇
(ODD L)/L←⍳10
Но когда я попробую это
{2|⍵} 5
или это
ODD←{2|⍵}
Я получаю синтаксисную ошибку. Те же фрагменты работают нормально здесь.
Я полный новичок в APL. Может ли кто -нибудь объяснить мне, что вызывает эту ошибку синтаксиса?
Решение
Другие советы
Синтаксис DFNS (фрагмент функции в кудрявых скоб) не поддерживается всеми APL. Если это не поддерживается, ожидайте синтаксисной ошибки или ошибки, не являющейся ошибкой.
Насколько мне известно, только Dyalog APL и NGN APL (см. http://ngn.github.io/apl/web/) поддержать это.
У Sharp APL была функция прямого определения, но синтаксис был довольно другим.
NGN APL не поддерживает определение устаревшей функции, только DFN.
GNU APL теперь поддерживает такие DFN; Вы можете попробовать его, скомпилируя его из репозитория подрывной деятельности или подогнуть релиз 1.3.