Это работает в Dyalog APL, но не в GNU APL:
{10<⊃⍵:⍵ ⋄ ∇ ⍵,⍨+/2↑⍵}1
Ошибка, которую я получаю,
Illegal : in immediate execution+
Я использую REPL, но пробовал запустить его и из файла, но это тоже не сработало.
Если что-то, что я использую, специфично для Dyalog, как правильно это сделать в GNU?
GNU APL не поддерживает защиту (в отличие от {condition:if_condition_true ⋄ else}
) в прямых функциях.
Попробуйте использовать определение del (∇
) и преобразуйте программу для использования цикла (на самом деле, перейдите по ссылке), чтобы она была совместима с APL2:
∇r←f x
r←x
LOOP:→(10<⊃r)/0
r←r,⍨+/2↑r
→LOOP
∇
f 1
13 8 5 3 2 1 1
Если вы хотите изучить APL с использованием GNU APL, вам придется поискать учебные пособия и книги для APL2, в которых не используются слишком много расширенных функций Dyalog APL, например APL — интерактивный подход, второе издание (который отлично подходит для обучения вы используете редактор del).
Судя по документации, dfns GNU APL ухудшены до предела удобства использования: «Существует ряд функций, связанных с лямбда-выражениями, которые присутствуют в других интерпретаторах APL, но НЕ реализованы в GNU APL. Это включает в себя множество операторов, защиту, лексическую область видимости, и, возможно, больше». gnu.org/software/apl/apl.html#Limitations-of-Lambdas