如何在J语言中用^:函数编写缄默式tetration动词?
用J语言的^:实现缄默式Tetration(迭代幂运算)
核心思路
Tetration(y^^x)是右结合的迭代幂运算:x=1时结果为y,x>1时每次用y作为底数、上一次的结果作为指数。用J的^:(动词幂)可直接表达这种迭代逻辑,同时通过修饰符链实现缄默式处理边界情况与无穷大输入。
缄默实现代码
tet=: ((&^)^:([:`_])@[)@] ` 1 ` _ @. (0<[)`(0=])`(0=,*0=])
代码拆解
- 迭代核心逻辑:
((&^)^:<:@[)@]&^:生成固定右参数(底数y)的幂运算动词,输入z时返回y^z<:@[:对左参数x执行减1操作([代表左参数x,<:是减1动词)(&^)^:<:@[:将y^操作迭代x-1次@]:把迭代动词作用于右参数y(初始值),得到y^^x的结果
- 边界情况分支(@.):
(0<[):x>0时使用核心迭代逻辑,支持x为无穷大_(此时<:@[返回_,^:_执行无穷迭代)(0=]):y=0且x≠0时返回0(符合0^^x=0的定义)(0=,*0=]):y=0且x=0时返回_(未定义情况)- 对应分支结果依次是迭代逻辑、1(x=0时y^0=1)、`_`(0^0未定义)
测试验证
2 tet 4 NB. 输出65536,对应2^^4=2^(2^(2^2)) 0.5 tet _ NB. 输出~0.6411857,收敛到方程z=0.5^z的解 1 tet _ NB. 输出1,固定点迭代结果 2 tet _ NB. 输出_,迭代发散到无穷大 0 tet 5 NB. 输出0 5 tet 0 NB. 输出1 0 tet 0 NB. 输出_,未定义
内容的提问来源于stack exchange,提问作者shirAko
相关产品推荐
相关产品推荐

