Syntax error when attempting to amend a string with indexing

风流意气都作罢 提交于 2019-12-25 00:34:16

问题


I'm studying APL from here.

Why am I getting this syntax error?

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

But if I save 'computer' in a variable I don't get the error:

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

What am I doing wrong?


回答1:


'computer' is a constant, and you can't change the value of a constant itself, only the current value of a variable.

Think about it: If you could assign to 'computer', then next time you wrote 'computer', would you expect the result to be COMputer? How about 2←3? Clearly, this doesn't make any sense.

However, you can amend a value without assigning it to a name, using the relatively new @ "at" operator (it isn't included in Mastering Dyalog APL, but the documentation is available online).

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

You can read this as put the letters 'COM' at indices 1 2 3 of the word 'computer'. The here only serves to separate 1 2 3 from 'computer so it is clear to @ what constitutes the indices and what is the array to be amended.

Run it on TryAPL!




回答2:


That bracket notation is made specifically for modifying variables. The return value of T[1 2 3] ← 'COM' is 'COM', so if the expression didn't modify a variable, it would be pointless (or, almost identical to ).

To get a modified array, not modify a variable, use the operator @:

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

Try it online!



来源:https://stackoverflow.com/questions/52928337/syntax-error-when-attempting-to-amend-a-string-with-indexing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!