Python中递归定义的超操作序列
我创建了一个简单的函数来迭代二进制运算,我想用它递归地定义整数超运算序列(序列、加法、乘法等等) 迭代函数为:Python中递归定义的超操作序列,python,function,recursion,currying,integer-arithmetic,Python,Function,Recursion,Currying,Integer Arithmetic,我创建了一个简单的函数来迭代二进制运算,我想用它递归地定义整数超运算序列(序列、加法、乘法等等) 迭代函数为: # f : (int,int) -> int # x,y : int def right_iterate(f,x,y): a = x while y - 1 > 0: y = y - 1 x = f(a,x) return x 理想情况下,我想这样定义超操作序列: # H : int -> ( (int, i
# f : (int,int) -> int
# x,y : int
def right_iterate(f,x,y):
a = x
while y - 1 > 0:
y = y - 1
x = f(a,x)
return x
理想情况下,我想这样定义超操作序列:
# H : int -> ( (int, int) -> int )
# n,x,y : int
def H(n)(x,y):
if n == 0:
return x+1
else:
return right_iterate(H(n-1),x,y)
基本上是我正在处理的等式的精确翻译,但Python不支持这种翻译。我想我需要做一些类似于curry的事情,并定义一个函数h(n,x,y)-->h(n)(x,y)
,但我不确定如何定义
我试过使用
# H : int -> ( (int,int) -> int )
# h : (int,int) -> int
# n,x,y : int
def H(n):
def h(x,y):
if n == 0:
return y + 1
else:
return right_iterate(H(n-1),x,y)
return h
这是不对的,但它似乎在正确的轨道上
当n
为1时,其计算结果与
if y != 0:
return x + y - 1
else:
return x + y
当n
为2时,其计算结果为`
if y != 0:
return x * y - (y -1)
else:
return x
根据对的快速研究,我猜您想要的是:
from operator import add
def right_iterate(f, a, b):
c = a
while b > 0:
a = f(c, a)
b -= 1
return a
def H(n, a, b):
if n == 0:
return right_iterate(add, 1, b)
if b == 0:
if n == 1:
return a
if n == 2:
return 0
if n >= 3:
return 1
return H(n - 1, a, H(n, a, b - 1))
if __name__ == '__main__':
print(H(0, 2, 3)) # 1 + 3
print(H(1, 2, 3)) # 2 + 3
print(H(2, 2, 3)) # 2 * 3
print(H(3, 2, 3)) # 2 ** 3
print(H(4, 2, 3)) # 2 ** 2 ** 2
输出
> python3 test.py
4
5
6
8
16
>
你在问什么不清楚你想同时做多个操作吗?我想一次做一个操作。我试图递归地定义每个操作,使H(0)(x,y)=s(x),H(1)(x,y)=x+y,H(2)(x,y)=x*y,依此类推。@GovindaMalavipathirana H(n)应该是一个接受两个整数并输出一个整数的函数。您试图在这里实现一个开关,根据
H
函数的输入执行将不同,是吗?@GovindaMalavipathirana是的,n
确定正在执行的操作。这是可行的,但我想使用right\u iterate
来定义从序列中进行的加法、从加法中进行的乘法,等等。例如,right_iterate(add,a,b)=a*b
。