#cross-platform #apl
#кроссплатформенность #apl
Вопрос:
Я знаю, что вы можете получить символьный вектор всех чисел с помощью ∊⍕¨⍳10
, но существует ли независимая от платформы идиома для получения вектора всех алфавитных символов, помимо ручного ввода 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
? Я знаю, что могу сделать, ⎕AV[(⍳26) (⎕AV⍳'a')-1]
чтобы получить все символы нижнего регистра (и верхнего, изменив 'a'
на 'A'
) в Dyalog APL, но я предполагаю, что системная переменная ⎕AV
недоступна в других средах.
Ответ №1:
Не совсем.
В Dyalog APL то, что я обычно делаю, это использую ⎕A
для символов верхнего регистра и ⎕UCS 96 ⍳26
для символов нижнего регистра. (И ⎕A,⎕UCS 96 ⍳26
для всего алфавита.)
⎕AV
обычно присутствует, но его содержимое не является стандартным. (Например, NARS2000 ⎕AV
отличается от Dyalog.) Кстати, в Dyalog ⎕AV
считается устаревшим в пользу ⎕UCS
. Любой APL, который реализует ⎕UCS
, будет делать это таким же образом, потому что Unicode является установленным стандартом.
Если вам нужен гарантированный, независимый от реализации, читаемый способ определения алфавита, я бы действительно рекомендовал просто сохранить abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
в вашей рабочей области.
Однако я бы не рекомендовал для начала пытаться писать независимый от реализации APL-код. Диалекты APL довольно расходятся, так что это определенно нетривиально (если это вообще возможно для сложного кода), и его будет сложно поддерживать.
Комментарии:
1. Принимаете ли вы участие в конкурсе Dyalog в этом году?
Ответ №2:
Даже несмотря на то, что четырехъядерные имена ( ⎕xxx
) обычно не чувствительны к регистру, MicroAPL различает ⎕A
и ⎕a
, поэтому ⎕a,⎕A
выдает 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
.
Ответ №3:
Да, в последних версиях *, напишите ⎕A,⎕C⎕A
, для ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
.
* 18.0 и выше.