Dato curioso: los lenguajes de programación puramente funcionales admiten bucles.
Una implementación en el lenguaje SML (metalenguaje estándar) sería
diversión multiply_list (xs: int list) =
si nulo xs
entonces 1
else hd xs * multiply_list (tl xs)
- ¿Qué libro es bueno para los algoritmos básicos?
- ¿Hay algún proceso o conjunto de preguntas que uno debería hacer al resolver problemas tácticos de ajedrez?
- ¿Por qué es 5n + 8n ^ 2 + 100n ^ 3 = O (n ^ 4)?
- ¿Qué método se ejecuta más rápido para una matriz con todas las claves idénticas, tipo burbuja o tipo inserción?
- Silicon Valley (serie de televisión): ¿Cuál es el ejemplo más cercano en la vida real al algoritmo de compresión de Pied Piper?
Probemos esto en un lenguaje más común. Pitón.
Las funciones de primera clase en un lenguaje le permiten escribir una función que permita pasar otras funciones como argumentos.
Plegar (función de orden superior) (también conocido como reducir ) es una de esas funciones que puede combinar de forma recursiva una estructura de datos para usted.
Definamos una función que pueda multiplicar dos números.
def multiplica (x, y):
retorno (x * y)
Pase esta función a la reducción de Python .
importar functools
matriz = [1, 2, 3, 4]
respuesta = reducir (multiplicar, matriz)
le dará el producto de todos los enteros de la matriz.
De documentos de Python:
functools.reduce(function, iterable[, initializer])
Aplique la función de dos argumentos acumulativamente a los elementos de secuencia , de izquierda a derecha, para reducir la secuencia a un solo valor. Por ejemplo,
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
calcula ((((1+2)+3)+4)+5)
.
(Implementación de reducción de los documentos).
def reduce (función, iterable, inicializador = Ninguno):
it = iter (iterable)
si inicializador es Ninguno:
tratar:
initializer = next (it)
excepto StopIteration:
raise TypeError (‘reduce () de secuencia vacía sin valor inicial’)
acumulo_valor = inicializador
para x en ella:
valor_acumulativo = función (valor_acumulativo, x)
devolver valor_acumulativo