分配 niladic 函数
Assigning a niladic function
非 niladic 函数 F 可以分配给变量 G 和
G ← F
但是,如果 F 是 niladic,我该如何防止它被计算?
你不能。
在某种程度上,niladic 函数的行为类似于数组,只是它们的值只有在使用时才会确定。这也意味着它们表现出值语义而不是引用语义。另请注意,niladic 函数不能作为运算符的操作数,但它们的结果将成为操作数。
规避这两个问题的一种方法是将 niladic 函数包装在 dfn 中,以便它采用一个(或两个)伪参数,因此:
G←{F}
APL 从右到左计算表达式。一旦函数的所有参数都存在,函数就会被求值,函数及其参数将被求值结果替换。
现在考虑你的例子G←F。如果 F 是一元的或二元的,则无法计算 F,因为它的右参数缺失。在解析器术语中,标记 F 被移动而不是减少,第一个可以减少的表达式是 G←F,它将 F 分配给 G.
另一方面,如果 F 是 niladic,那么 F 可以(因此将被)立即评估(例如,结果 Z),因此赋值将是 G←Z 而不是 G←F .
我不确定你想做什么所以请原谅我回答错误的问题。
对我来说,这听起来像是您想要一个可选的正确参数。
在 APL2 中我会做这样的事情:
'' ⎕EA 'G←F ra'
如果 ra 未定义,将捕获值错误并且什么也不会发生。如果您想要 G 的默认值,请将该值分配到 EA 的左侧。
非 niladic 函数 F 可以分配给变量 G 和
G ← F
但是,如果 F 是 niladic,我该如何防止它被计算?
你不能。
在某种程度上,niladic 函数的行为类似于数组,只是它们的值只有在使用时才会确定。这也意味着它们表现出值语义而不是引用语义。另请注意,niladic 函数不能作为运算符的操作数,但它们的结果将成为操作数。
规避这两个问题的一种方法是将 niladic 函数包装在 dfn 中,以便它采用一个(或两个)伪参数,因此:
G←{F}
APL 从右到左计算表达式。一旦函数的所有参数都存在,函数就会被求值,函数及其参数将被求值结果替换。
现在考虑你的例子G←F。如果 F 是一元的或二元的,则无法计算 F,因为它的右参数缺失。在解析器术语中,标记 F 被移动而不是减少,第一个可以减少的表达式是 G←F,它将 F 分配给 G.
另一方面,如果 F 是 niladic,那么 F 可以(因此将被)立即评估(例如,结果 Z),因此赋值将是 G←Z 而不是 G←F .
我不确定你想做什么所以请原谅我回答错误的问题。
对我来说,这听起来像是您想要一个可选的正确参数。 在 APL2 中我会做这样的事情:
'' ⎕EA 'G←F ra'
如果 ra 未定义,将捕获值错误并且什么也不会发生。如果您想要 G 的默认值,请将该值分配到 EA 的左侧。