Синтаксическая ошибка при попытке изменить строку с индексацией - PullRequest
0 голосов
/ 22 октября 2018

Я изучаю APL с здесь .

Почему я получаю эту синтаксическую ошибку?

      'computer' [ 1 2 3 ] ← 'COM'
SYNTAX ERROR
'computer'[1 2 3]←'COM'
          ^

Но если я сохраню 'computer' в переменнойЯ не получаю ошибку:

      T ← 'computer'
      T
computer
      T[1 2 3] ← 'COM'
      T
COMputer

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

'computer' является константой, и вы не можете изменить значение самой константы, только текущее значение переменной.

Подумайте об этом: если бы вы могли присвоить 'computer',затем в следующий раз, когда вы напишите 'computer', ожидаете ли вы, что результат будет COMputer?Как насчет 2←3?Понятно, что в этом нет никакого смысла.

Однако вы можете изменить значение, не назначая его имени, используя относительно новый оператор @ "at" (это неНе включено в Мастеринг Dyalog APL , но документация доступна онлайн ).

      'COM'@1 2 3⊢'computer'
COMputer

Вы можете прочитать это как поставить буквы 'COM' at indexes 1 2 3 слова' computer '. здесь служит только для отделения 1 2 3 от 'computer, поэтому @ ясно, что составляет индексы и какой массив нужно изменить.

Запустите его на TryAPL!

0 голосов
/ 22 октября 2018

Эта скобочная запись сделана специально для изменения переменных.Возвращаемое значение T[1 2 3] ← 'COM' равно 'COM', поэтому, если выражение не изменяет переменную, оно будет бессмысленным (или почти идентичным ).

Чтобы получить измененный массив,не изменяйте переменную, используйте оператор @:

('COM'@1 2 3) 'computer'

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

...