APL Fork/Train 压缩

APL Fork/Train with Compression

我想 select 基于一些测试的数组中的元素。目前,我正在尝试通过压缩来做到这一点,我想把它写成一个默认函数。 (我对 APL 很陌生,所以请随时提出其他选择。)下面是一个最小的(不)工作示例。

下面第三行显示我可以在vec上使用测试函数f然后进行压缩,第五行显示我可以将恒等函数应用到vec ](如预期)。因此,根据我对 train documentation 的理解,我应该能够从 f 中以 / 为中心分叉。下面显示这不起作用,我认为这是因为 Dyalog 将第六行和第八行解释为执行 f-reduce。有没有办法表明我想要压缩列车而不是减少列车? (and/or 是否有更好的方法来完全做到这一点?)

      vec ← 10⍴⍳3
      f ← {⍵≤2}
      (f vec) / vec
1 2 1 2 1 2 1
      (f vec) / (⊢ vec)
1 2 1 2 1 2 1
      (f/⊢) vec
1
      (f(/)⊢) vec
1

是的,通过使 / 成为一个操作数,它被强制表现为一个函数。根据 APL Wiki,在 / 的结果之上应用 解决了问题:

      vec ← 10⍴⍳3
      f ← {⍵≤2}
      (f⊢⍤/⊢) vec
1 2 1 2 1 2 1