Ниже представлено дерево выражений для выражения вызова mul(add(2, mul(4, 6)), add(3, 5))
.Оценка выражения вызова
В приведенном ниже коде,
from operator import mul
def square(x):
print('In square with value: ' + str(x))
return mul(x, x)
def repeat(f, n):
def identity(x):
return x
def apply_n_times(x):
return repeat(f,n-1)(f(x))
if n < 0:
raise ValueError("Cannot apply a function %d times" % (n))
elif n == 0:
return identity
else:
return apply_n_times
g = repeat(square, 2)(5)
print(g)
Как я оцениваю называть выражение repeat(f, n-1)(f(x))
в коде выше, когда f
является функцией, а n
и x
являются целыми числами.
... Обычный способ? –
@ IgnacioVazquez-Abrams, когда 'f (x)' in '(f (x))' получает оценку перед 'repeat()' или после 'repeat()'? Как я могу решить этот поток? – overexchange
Зависит от реализации компилятора. И это не имеет значения, поскольку ни один из вызовов не имеет побочных эффектов, которые влияют на другие. –