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

如何为APL的Fold运算符(´)分配名称?赋值报错求解

问题

我可以按如下方式定义Sum:

Sum ← +´

该定义能正常运行:

Sum ⟨1, 2, 3⟩
6

我尝试把Fold运算符单独赋值给一个名称:

Fold ← ´

但触发了错误:

Fold ← ´
Error: Role of the two sides in assignment must match
at Fold ← ´
   ^^^^

请问有没有可行的方法完成这类定义?

解决办法

在APL里,´是高阶运算符——它需要先接收一个函数作为左操作数才能工作,而直接赋值给普通名称时,名称默认是「函数/变量」角色,和运算符的角色不匹配,所以会报错。要实现你的需求,有两种常用方式:

1. 定义成二元运算符

用APL的运算符定义语法,把Fold做成代理´的二元运算符:

Fold ← {⍺⍺ ´ ⍵⍵}

用法和原生´完全一致:

+ Fold ⟨1,2,3⟩
6
   × Fold ⟨2,3,4⟩
24

2. 包装成函数

如果习惯先传函数再传数组的调用风格,可以把它包装成普通函数:

Fold ← {⍺ ´ ⍵}

使用示例:

Fold + ⟨1,2,3⟩
6
   Fold × ⟨2,3,4⟩
24

额外说明

你之前定义的Sum ← +´之所以合法,是因为+´是派生函数——运算符´绑定了左操作数+之后,就变成了一个可以直接作用于数组的函数,它的角色和名称Sum匹配,所以赋值没问题。而单独的´是运算符,不能直接赋值给函数角色的名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:42:09