練習1.41。定義一個程序雙它有一個參數的步驟, 參數,並返回適用原程序 兩次的過程。例如,如果INC是加1,其參數的程序,然後 應該
(double inc)
是增加了2.程序 通過(((double (double double)) inc) 5)
SICP練習1.41
我實現了它在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(double))(inc)(0)
是否有任何的調試工具,可以用設定斷點蟒蛇像「廣發行」,這樣我可以調試該程序時的
double
函數被調用3次而不是2倍?
謝謝!
您可以使用'pdb'('import pdb; pdb.Pdb().set_trace()'是一個「斷點」)或Python支持的IDE,比如PyCharm(「社區版」現在是免費的)。 –