gpt4 book ai didi

mapping - 如何在 APL 中使用排名运算符而不是每个

转载 作者:行者123 更新时间:2023-12-02 02:42:40 25 4
gpt4 key购买 nike

我有

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分开)。换句话说,在参数的标量上我们:

  1. 公开标量:⊃⍵
  2. 应用函数:f⊃⍵
  3. 附上结果:⊂f⊃⍵

类似的表达式适用于二元情况,x f¨y,但我们需要:

  1. 公开两个标量:(⊃⍺)(⊃⍵)
  2. 应用函数:(⊃⍺)f(⊃⍵)
  3. 附上结果:⊂(⊃⍺)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,我们可以将 dummytxttexttoadd 视为全局常量并表达整个事物作为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com