"{⊂⍵}"与"⊂"有何不同?



我正在阅读Hui和Kromberg最近的"APL Since 1978",在讨论(模板(时,他们给出了以下示例:

{⊂⍵}⌺5⊢'abcde'
abc   abcd  abcde  bcde   cde

为什么需要{⊂⍵}而不是仅仅?我对 APL 仍然很陌生,但我天真地认为,一般来说,{f⍵}在一元调用时应该等同于f

从经验上看,情况并非如此:

⊂⌺5⊢'abcde'
DOMAIN ERROR
⊂⌺5⊢'abcde'
∧

但我不明白为什么。

您绝对正确,当以monadid方式调用时,{⊂⍵}等同于,但是根据文档:

f以二元方式调用,向量 left 参数指示每个轴的填充元素数和在哪一侧;正值表示填充在数组值之前,负值表示填充在数组值之后。

我们可以通过让函数一起返回两个参数的外壳来说明这一点:

{⊂⍺ ⍵}⌺5⊢'abcde'
┌─────────┬─────────┬─────────┬──────────┬──────────┐
│┌─┬─────┐│┌─┬─────┐│┌─┬─────┐│┌──┬─────┐│┌──┬─────┐│
││2│  abc│││1│ abcd│││0│abcde│││¯1│bcde │││¯2│cde  ││
│└─┴─────┘│└─┴─────┘│└─┴─────┘│└──┴─────┘│└──┴─────┘│
└─────────┴─────────┴─────────┴──────────┴──────────┘

此左参数旨在满足左参数的要求,因此可以轻松删除添加的填充:

{⊂⍺↓⍵}⌺5⊢'abcde'
┌───┬────┬─────┬────┬───┐
│abc│abcd│abcde│bcde│cde│
└───┴────┴─────┴────┴───┘

如果你想要一个隐式操作数而不是{⊂⍵}那么你可以使用⊢∘⊂(相当于{⍺⊢⊂⍵},因此{⊂⍵}(,或者在版本 18.0 中,⊂⍤⊢(相当于{⊂⍺⊢⍵},因此{⊂⍵}(。

相关内容

  • 没有找到相关文章

最新更新