Mapping 如何在APL中使用秩运算符代替各运算符

Mapping 如何在APL中使用秩运算符代替各运算符,mapping,apl,dyalog,Mapping,Apl,Dyalog,我有 并需要以下输出 dummytxt←'abcdefghijk' texttoadd←'down' rfikv←20 30 50 我可以用: defghijk20down defghijk30down defghijk50down 但请帮助我在不使用每个运算符的情况下使用秩⍤ 我使用Dyalog APL,但请不要使用火车 谢谢使用每一个的表达式,如f¨x,可以按等级表示为{⊂F⊃⍵}⍤0⊢x(注意⊢用于将数组右操作数0与数组右参数x)分离。换句话说,在参数的标量上,我们: 公开标量

我有

并需要以下输出

dummytxt←'abcdefghijk'
texttoadd←'down'
rfikv←20 30 50
我可以用:

 defghijk20down  defghijk30down  defghijk50down 
但请帮助我在不使用每个运算符的情况下使用秩

我使用Dyalog APL,但请不要使用火车

谢谢

使用每一个的表达式,如
f¨x
,可以按等级表示为
{⊂F⊃⍵}⍤0⊢x
(注意
用于将数组右操作数
0
与数组右参数
x
)分离。换句话说,在参数的标量上,我们:

  • 公开标量:
    ⊃⍵
  • 应用函数:
    f⊃⍵
  • 将结果括起来:
    ⊂F⊃⍵
  • 类似的表达式适用于二元情况,
    xf–y
    ,但我们需要:

  • 公开两个标量:
    (⊃⍺)
    (⊃⍵)
  • 应用函数:
    (⊃⍺)f(⊃⍵)
  • 将结果括起来:
    ⊂(⊃⍺)f(⊃⍵)
  • 这给了我们
    x{⊂(⊃⍺)f(⊃⍵)}⍤0⊢y
    。因此,我们可以使用秩来构建我们自己的每个运算符,该运算符允许派生函数的一元和二元应用:

    每个←{⍺←⊢ ⋄ ⍺ ⍺⍺{×⎕NC'⍺':⊂(⊃⍺)⍺⍺(⊃⍵) ⋄ ⊂⍺⍺⊃⍵}⍤0⊢⍵}
    (¯10↑各(⊂dummytxt),每个⍕每个rfikv),每个⊂文本添加
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    或者,我们可以将两个更简单的等价物替换为表达式:

    ('10{⊂(⊃⍺)↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⊃⍵}⍤0⊢rfikv){⊂(⊃⍺),(⊃⍵)}⍤0⊂文本添加
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    请注意,我们将
    texttoadd
    括起来,这样它就变成了标量,然后我们使用
    ⍤0
    来处理整个标量,只会再次公开它。相反,我们可以使用
    ⍤0 1
    表示希望在应用函数时使用整个vector right参数,而不需要披露其right参数:

    ('10{⊂(⊃⍺)↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⊃⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢文本添加
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    rfikv
    10
    是一个简单的标量,因此公开它们没有任何效果:

    ('10{⊂⍺↑(⊃⍵)}⍤0⊢(⊂dummytxt){⊂(⊃⍺),(⊃⍵)}⍤0{⊂⍕⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢文本添加
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    dummytxt
    与上面的
    texttoadd
    处于相同的情况,但作为左参数,因此我们可以跳过括号并要求秩使用整个向量左参数;
    ⍤10

    ('10{⊂⍺↑(⊃⍵)}⍤0⊢dummytxt{⊂⍺,(⊃⍵)}⍤1 0{⊂⍕⍵}⍤0⊢rfikv){⊂(⊃⍺),⍵}⍤0 1⊢文本添加
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    这和使用一般方法得到的一样简单。但是,如果我们观察到唯一的非标量是
    rfikv
    ,我们可以将
    dummytxt
    texttoadd
    视为全局常量,并将整个事物表示为单个
    ⍤0
    rfikv上的功能应用程序

    {⊂(¯10↑dummytxt,⍕⍵),texttoadd}⍤0⊢rfikv
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    当然,每个人也可以做到这一点:

    {('10↑dummytxt,⍕⍵),texttoadd}–rfikv
    Defghijk20向下Defghijk30向下Defghijk50向下
    
    ↓(dummytxt{10↑⍺,⍕⍵}⍤1 0⊢rfikv),⍤1.⊢text添加
    ?秩用于原位(N维意义上的矩形)数据。如果数据参差不齐(长度不均匀),因此不是像你这样的正交/矩形。你想要每一个,就像你拥有的一样。正确的工具用于正确的工作和所有这些。@DanBron OP试图通过翻译一个非常每个表达式来增加她对秩的理解。顺便说一句,数据是矩形的,因为它只包含简单的标量和向量,这显然不能参差不齐。Adám,谢谢你们非常详细的回答(和你们所有人)1.在最后的回答中,你们忘记了
    '10
    ,这就是为什么我认为最后的答案是
    {⊂(¯10↑dummytxt(⍕⍵)),texttoadd}⍤0⊢rfikv
    @yulliiaserhiienko不客气。谢谢你指出这一点-修复了。很抱歉弄乱了你的帖子。你能解释一下
    ⍺⍺此处
    每个←{⍺←⊢ ⋄ ⍺ ⍺⍺{×⎕NC'⍺':⊂(⊃⍺)⍺⍺(⊃⍵) ⋄ ⊂⍺⍺⊃⍵}⍤0⊢⍵}
    @yulliiaserhiienko为了避免混乱,可以问一个单独的问题:我在答案中看到了以下代码:
    每个←{⍺←⊢ ⋄ ⍺ ⍺⍺{×⎕NC'⍺':⊂(⊃⍺)⍺⍺(⊃⍵) ⋄ ⊂⍺⍺⊃⍵}⍤0⊢⍵}…阿德姆,谢谢,单独创建
    
    scenv←(¯10↑¨(⊂dummytxt),¨⍕¨rfikv),¨⊂texttoadd