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

Syntax error when attempting to amend a string with indexing

我正在学习 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

我做错了什么?

那个括号符号是专门用来修饰变量的。 T[1 2 3] ← 'COM' 的 return 值为 'COM',因此如果表达式没有修改变量,它将毫无意义(或者,几乎与 相同)。

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

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

Try it online!

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

想一想:如果你可以赋值给'computer',那么下次你写'computer'时,你会期望结果是COMputer吗? 2←3怎么样?显然,这没有任何意义。

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

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

您可以将此解读为 将字母 'COM' 放在 索引 1 2 3 的单词 'computer'.这里的只是用来把1 2 3'computer分开的,所以很清楚@什么是索引,什么是要修改的数组。

Run it on TryAPL!