You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

APL中递归dop(双∇)的用法示例及属性确认问询

递归DOP(用户自定义操作符)示例与问题解答

1. 典型递归DOP示例代码

tryapl.org中用双Del(∇∇)实现的递归DOP,以“重复应用指定函数N次”的操作符为例:

∇ r←f repeat n
  :If n=0
      r←⊢  ⍝ 返回恒等函数,应用后不改变输入值
  :Else
      r←f ⍺⍺ repeat n-1  ⍝ 递归:将函数f与repeat操作符作用于n-1次,生成新的复合函数
  :EndIf
∇∇

2. 具体使用示例

这个repeat是二元操作符:左操作数为要重复的函数,右操作数为重复次数。使用时需先将操作符与函数、次数绑定,再作用于目标数组:

示例1:单目函数重复应用

将+3(给输入加3的单目函数)重复应用2次到数值5:

5 (+3) repeat 2

执行逻辑:repeat 2生成的复合函数是连续执行两次+3,最终结果为5+3+3=11。

示例2:二元函数适配使用

对于二元函数(比如+),可通过∘绑定固定右参数,生成单目函数后使用:

5 (+∘3) repeat 2

结果同样为11;也可直接让生成的复合函数以二元方式调用:

(+ repeat 2) 5 3

逻辑为(5+3)+3=11,输出结果11。

3. 是否属于单目DOP的解答

操作符的“单目/二元”取决于它接受的操作数数量,而非是否使用⍺(函数应用时的左参数):

  • 你提到的DOP使用了⍺⍺(操作符的左操作数,即传入的函数),说明它是二元操作符——需要同时接收左操作数(函数)和右操作数(如示例中的重复次数)。
  • 代码中未用到⍺,是因为这个DOP的作用是生成复合函数,⍺是最终复合函数应用时的左参数,并非操作符本身的操作数。
  • 单目DOP只会接受一个操作数(通常是函数),定义格式为∇ r←op f,不会同时存在⍺⍺和⍵⍵。

4. 调用报错的常见原因

你调用时出错,大概率是操作方式不符合规则:

  • 错误方式1:跳过函数指定,直接用操作符作用于数组,比如5 repeat 2
  • 错误方式2:颠倒操作数顺序,比如repeat (+3) 2
  • 错误方式3:混淆操作符绑定与函数应用的顺序,比如repeat 2 (+3) 5

内容的提问来源于stack exchange,提问作者ThePoetCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:10:50