我正在阅读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 中,⊂⍤⊢
(相当于{⊂⍺⊢⍵}
,因此{⊂⍵}
(。