Вы не реализовали функцию уменьшения. Ваша функция myreduce()
вместо этого реализует map функция высшего порядка , производя последовательность результатов myfunc()
для входных данных в mylist
. При отображении используемая функция должна принимать один вход, и каждый вход обрабатывается независимо, а результирующая последовательность выходов указывается в том же порядке, что и входы, которые их создали.
Операция высшего порядка уменьшение приведет к одному выходу . Сокращение означает, что вы итеративно берете выходные данные из операции , предшествующей , и вместе со следующим входным значением вызывается функция для получения следующего выходного значения. Поэтому для правильной работы функции требуется два входа. Для первого шага, где нет предшествующего вывода, вы должны либо начать с фиксированного начального значения, либо просто взять два ввода из списка ввода. С каждым шагом, создающим новый вывод, предыдущий вывод отбрасывается. В конце вы получите один выход.
Использование Reduce для получения максимума для [1, 2, 3]
может начинаться с двух входов и простой функции, которая определяет максимум этих двух входов. Затем процедура выполняет следующие шаги:
- Возьмите первый вход, 1, в качестве начального значения 'выхода'. Если больше нет входных данных, это будет конечный результат.
- Используйте начальный выход, 1 из предыдущего шага, и следующее входное значение, 2, и вызовите функцию с обоими. Максимальное значение 1 и 2 равно 2, так что именно это выдает функция в качестве первого результата вывода.
- Используйте 2 из предыдущей операции и следующий вход, 3 для повторного вызова функции. Максимум 2 и 3 равен 3, так что именно это выдает функция в качестве нового выхода.
- Входов больше нет, выход 3.
Ваша реализация сокращения должна сделать то же самое:
- начать с заданного начального значения для «выхода» или взять первое значение из списка ввода.
- для каждого значения в (входном списке) входного списка, вызовите функцию с последним выходом и значением, и возвращаемое значение заменит выход.
- Когда все значения были обработаны, вернуть вывод.
Python 3 реализовал это как functools.reduce()
, документация на самом деле поставляется с реализацией чистого Python, которую вы можете скопировать напрямую.