以下作业取自here
Q5。通过调用reduce with compose1作为第一个参数,定义Homework 2中的重复函数。在下面的入门实现中只添加一个表达式:
def square(x):
return x*x
def compose1(f, g):
"""Return a function of x that computes f(g(x))."""
return lambda x: f(g(x))
from functools import reduce
def repeated(f, n):
"""Return the function that computes the nth application of f, for n>=1.
f -- a function that takes one argument
n -- a positive integer
>>> repeated(square, 2)(5)
625
>>> repeated(square, 4)(5)
152587890625
"""
assert type(n) == int and n > 0, "Bad n"
return reduce(compose1, "*** YOUR CODE HERE ***" )
要完成此作业,我想了解g
绑定到什么内容? f
绑定到square
函数
答案 0 :(得分:2)
首先,repeated(f, 4)
应该返回什么?
在某个任意arg
上调用时,将返回f(f(f(f(arg))))
的函数。
因此,如果您想使用compose1
进行构建,则需要返回compose1(compose1(compose1(f, f), f), f)
或compose1(f, compose1(f, compose1(f, f)))
。
现在,看看reduce
做了什么,并找出每次传递给compose1
的内容。显然,您的iterable
参数必须以f
本身开头或结尾。但是你还想要什么呢,以确保你得到两个可接受的结果之一?
同时,在每次调用compose1
之外,除了最后一个,两个参数中的一个必须是repeated
函数的f
,而另一个是另一个调用的结果到compose1
。 (最后一次,当然,他们都是f
。)弄清楚哪些是f
,哪个是g
,以及你如何得到reduce
为每个传递正确的值,你已经解决了问题。