Существует ли идиома APL для получения вектора всех алфавитных символов?

#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 .

Попробуйте APL онлайн!

Документация.


* 18.0 и выше.