在Dyalog APL中,N元归约能否定义为可命名函数?
APL中N元归约的可命名函数实现
你的判断有部分道理,但并非完全无法实现可命名的N元归约函数——2,/确实不能直接作为独立的命名函数对象,但可以通过函数包装的方式将其转化为可复用的命名函数。
语法差异解释
-,/是合法的运算符派生函数:归约运算符/作用于单目函数-,形成一个完整的函数结构,因此单独输入能显示其函数定义。2,/是运算符/的滑动归约用法:左边的2是数值,用来指定滑动归约的窗口大小(即N元归约的N),这种形式必须结合右侧的数组操作数才能构成完整表达式,单独的2,/既不是函数,也不是完整运算式,因此会触发语法错误。
可命名函数的实现方法
方法1:自定义窗口大小的二元函数
通过包装定义一个二元函数,让左侧参数接收窗口大小,右侧参数接收目标数组:
NConcatReduce←{⍺,/⍵}
使用示例:
v←⍳5 2 NConcatReduce v ⍝ 输出:1 2 2 3 3 4 4 5 3 NConcatReduce v ⍝ 输出:1 2 3 2 3 4 3 4 5
方法2:固定窗口大小的单目函数
如果只需要固定某一个窗口大小(比如示例中的2元归约),可以直接把窗口大小写入函数:
2ConcatReduce←{2,/⍵}
使用示例:
2ConcatReduce ⍳5 ⍝ 输出:1 2 2 3 3 4 4 5
内容的提问来源于stack exchange,提问作者justin2004
相关产品推荐
相关产品推荐

