练习 1.41。定义一个过程 double,它将一个参数的过程作为参数,并返回一个应用原始过程两次的过程。例如,如果 inc 是一个对其参数加 1 的过程,那么
(double inc)
应该是一个加 2 的过程。返回什么值(((double (double double)) inc) 5)
我用 Python 实现了它。
def double(f):
print(f)
return (lambda x: (f(f(x))))
def inc(x):
return x+1
print(double(inc)(0))
print((double(double))(inc)(0))
print((double(double(double)))(inc)(0)
输出:
<function inc at 0x00000000029BBB70>
2
<function double at 0x0000000002141730>
<function inc at 0x00000000029BBB70>
<function double.<locals>.<lambda> at 0x00000000029BBC80>
4
<function double at 0x0000000002141730>
<function double.<locals>.<lambda> at 0x00000000029BBD08>
<function inc at 0x00000000029BBB70>
<function double.<locals>.<lambda> at 0x00000000029BBBF8>
<function double.<locals>.<lambda> at 0x00000000029BBD90>
<function double.<locals>.<lambda> at 0x00000000029BBE18>
16
我的问题是:
为什么输出
print((double(double(double)))(inc)(0)
是 16 而不是 8?为什么函数在运行时
double
被调用了 3 次而不是 2 次(double(double))(inc)(0)
是否有任何调试工具可以在 python 中设置断点,例如 C 中的“gdb”,以便我可以调试这个程序?
谢谢!