作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有
dummytxt←'abcdefghijk'
texttoadd←'down'
rfikv←20 30 50
需要下面的输出
defghijk20down defghijk30down defghijk50down
我可以用:
scenv←(¯10↑¨(⊂dummytxt),¨⍕¨rfikv),¨⊂texttoadd
但是请帮我写没有每个运营商但使用等级 ⍤
我使用 Dyalog APL,但请不要使用火车。
谢谢
最佳答案
使用 Each 的表达式,如 f¨x
,可以根据 Rank 表示为 {⊂f⊃⍵} ⍤0⊢x
(注意⊢
是将数组右操作数0
与数组右参数x
分开)。换句话说,在参数的标量上我们:
⊃⍵
f⊃⍵
⊂f⊃⍵
类似的表达式适用于二元情况,x f¨y
,但我们需要:
(⊃⍺)
…(⊃⍵)
(⊃⍺)f(⊃⍵)
⊂(⊃⍺)f(⊃⍵)
这给了我们 x{⊂(⊃⍺)f(⊃⍵)}⍤0⊢y
。因此,我们可以使用 Rank 构建我们自己的 Each 运算符,它允许派生函数的单子(monad)和二元应用:
Each←{⍺←⊢ ⋄ ⍺ ⍺⍺{×⎕NC'⍺':⊂(⊃⍺)⍺⍺(⊃⍵) ⋄ ⊂⍺⍺⊃⍵}⍤0⊢⍵}
(¯10↑Each(⊂dummytxt),Each⍕Each rfikv),Each⊂texttoadd
defghijk20down defghijk30down defghijk50down
或者,我们可以将两个更简单的等价代入您的表达式中:
(¯10{⊂(⊃⍺)↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⊃⍵}⍤0⊢rfikv){⊂(⊃⍺),(⊃⍵)}⍤0⊂texttoadd
defghijk20down defghijk30down defghijk50down
请注意,我们将 texttoadd
括起来,使其成为标量,然后我们使用 ⍤0
来处理整个标量,只是为了再次公开它。相反,我们可以使用 ⍤0 1
来表示在应用函数时想要使用整个 vector 右参数,而这又不需要公开其右参数:
(¯10{⊂(⊃⍺)↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⊃⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢texttoadd
defghijk20down defghijk30down defghijk50down
rfikv
和 ¯10
是一个简单的标量,因此公开它们没有任何效果:
(¯10{⊂⍺↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢texttoadd
defghijk20down defghijk30down defghijk50down
dummytxt
与上面的 texttoadd
情况相同,但是作为左参数,所以我们可以跳过 enclose-disclose 并要求 Rank 使用整个向量左参数; ⍤1 0
:
(¯10{⊂⍺↑(⊃⍵)}⍤0⊢dummytxt{⊂⍺,(⊃⍵)}⍤1 0{⊂⍕⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢texttoadd
defghijk20down defghijk30down defghijk50down
这与使用通用方法一样简单。然而,如果我们观察到唯一的非标量是 rfikv
,我们可以将 dummytxt
和 texttoadd
视为全局常量并表达整个事物作为 rfikv
上的单个 ⍤0
函数应用程序:
{⊂(¯10↑dummytxt,⍕⍵),texttoadd}⍤0⊢rfikv
defghijk20down defghijk30down defghijk50down
当然,Each 也可以这样做:
{(¯10↑dummytxt,⍕⍵),texttoadd}¨rfikv
defghijk20down defghijk30down defghijk50down
关于mapping - 如何在 APL 中使用排名运算符而不是每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247544/
我是一名优秀的程序员,十分优秀!