如何创建支持中缀调用的匿名函数?(ngn/k及K方言适用)
实现K语言中缀形式的匿名函数调用
在ngn/k及多数K方言中,默认只有单字符符号类的二元函数支持中缀调用(如内置的+、*),字母命名的函数则默认是前缀调用形式。要实现2 f 3这类中缀调用,可通过以下几种方式:
1. 绑定匿名函数到符号运算符
选择一个未被内置功能占用的单字符符号(如~、^,注意避免覆盖常用运算符),将匿名函数赋值给它,即可直接用中缀形式调用:
~:{x+y} / 将加法匿名函数绑定到~符号 2 ~ 3 / 中缀调用,输出5
如果需要临时使用,用完后可以恢复原符号的功能(比如~原本是逻辑非,可重新赋值~:{!x})。
2. 利用命名空间语法(kdb+/ngn/k通用)
通过命名空间前缀的语法,也可以实现类中缀的调用形式,无需覆盖符号:
.f:{x+y} / 将函数定义在根命名空间下 2 .f 3 / 中缀风格调用,输出5
这种方式适合不想修改内置符号的场景,.f本质是命名空间中的函数,K语法支持x .func y的二元调用形式。
3. 自定义中缀包装器(通用方案)
如果需要更灵活的方式,可以写一个通用的中缀包装函数,用来传递匿名函数:
@:{[x;f;y] f[x;y]} / 定义包装器@,接收左值、函数、右值 2 @ {x+y} 3 / 中缀风格调用匿名函数,输出5
这里的@可以替换成任意未被占用的符号或标识符,包装器的作用是将前缀调用的函数转换为中缀形式。
内容的提问来源于stack exchange,提问作者Fmbalbuena
相关产品推荐
相关产品推荐

