我想同时压缩⌿几个向量/矩阵。
这是我的数据:
txt←(3 3⍴'a')(3 3⍴'b')(3 3⍴'c')(3 3⍴'d')
b←(0 1 0)(1 1 1)(1 1 0)(0 0 0)现在,我想用txt中相应的布尔向量压缩b中的每个矩阵。
b⌿¨txt以下是我想要回来的东西:
┌───┬───┬───┬───┐
│aaa│bbb│ccc│ │
│ │bbb│ccc│ │
│ │bbb│ │ │
└───┴───┴───┴───┘我已经在tryapl.org上尝试过了,它的行为和我预期的一样,但是在APL2中,我得到了一个指向b和每个字形的域错误。
这里有没有任何APL2黑客可以帮我这个忙?在没有显式循环的情况下,还有其他方法可以做到这一点吗?内部/外部产品?
发布于 2018-12-06 13:06:27
这在APL2中失败的原因是,⌿纯粹是APL2中的一个运算符,而在Dyalog中,它是一个混合函数/运算符,因为如果它左边有一个数组,那么它的作用就像一个函数,而如果它左边有一个函数,则它是一个操作符。
在Dyalog中,由于⌿作为正常函数,b和txt的项将按您的预期由¨配对。
在APL2中,b将被绑定到一元算子⌿作为它的唯一操作数,然后将整个导出函数b⌿与¨一起应用于txt的每一项。不用说,整个b (向量向量)对于⌿的单个应用程序来说不是一个合适的左参数。
您可以通过将⌿封装在一个函数中,然后在该包装函数上使用¨来解决这个问题。包装非常简单,如下所示:
r←x R y
r←x⌿y发布于 2018-12-11 17:13:40
在GNU (一个APL2导数)中,您可以在⌿周围加上圆括号,也可以将⌿置入周围:
txt←(3 3⍴'a')(3 3⍴'b')(3 3⍴'c')(3 3⍴'d')
b←(0 1 0)(1 1 1)(1 1 0)(0 0 0)
b(⌿)¨txt
aaa bbb ccc
bbb ccc
bbb
b(⌿¨)txt
aaa bbb ccc
bbb ccc
bbb 在最初的IBM APL2 (PC版本)中,所有这些似乎都不起作用。原因可能是⌿含糊不清(它可能意味着“功能压缩”以及“操作符减少”),而⌿标准(由IBM和GNU实现)没有说明如何解决这一模糊性。括号强制将⌿作为函数。
https://stackoverflow.com/questions/53651765
复制相似问题