尝试使用索引修改字符串时的语法错误

时间:2018-10-22 11:31:26

标签: indexing variable-assignment in-place apl dyalog

我正在学习here中的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 :(得分:3)

'computer'是一个常量,您不能更改常量本身的值,只能更改变量的当前值。

考虑一下:如果您可以分配给'computer',那么下次写'computer'时,您期望结果为COMputer吗? 2←3怎么样?显然,这没有任何意义。

但是,您可以使用相对较新的@“ at”运算符(不包含在 Mastering Dyalog APL中)修改值而不将其分配给名称。 ,但the documentation is available online)。

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

您可以在在“计算机”一词的索引1 2 3上输入字母'COM'来阅读。 在这里仅用于将1 2 3'computer分开,因此@很清楚什么是索引,什么是要修改的数组。

Run it on TryAPL!

答案 1 :(得分:2)

该括号符号专门用于修改变量。 Number of errors: 9 ([X, M, S, K, B, Q, L, I, U]) 的返回值为Number of errors: 9 (XMSKBQLIU) ,因此,如果表达式不修改变量,它将毫无意义(或几乎与T[1 2 3] ← 'COM'相同)。

要获取修改后的数组而不是修改变量,请使用运算符@

'COM'

Try it online!