En un lenguaje de programación funcional que sea lo suficientemente potente (por ejemplo, con tipos de datos para implementar cierres ), puede eliminar todos los usos de orden superior mediante la transformación de la desfuncionalización . Dado que este método se utiliza para compilar este tipo de lenguaje, puede suponer razonablemente que esto no afecta el rendimiento y que, en este contexto, un orden superior no hace que el lenguaje sea menos poderoso. Sin embargo, sí afecta cómo escribir código.
Sin embargo, si el lenguaje no es lo suficientemente poderoso, entonces sí, el orden superior proporciona poder expresivo. Considere el cálculo lambda: sin ninguna función de orden superior, realmente no puede hacer nada, principalmente porque los tipos de datos más básicos (enteros, booleanos) se implementan utilizando funciones.
En conclusión, realmente depende del idioma.
Arriba está mi respuesta. A continuación, un comentario sobre una suposición habitual sobre los idiomas imperativos.
acerca de un algoritmo que en un lenguaje de programación funcional no perezoso tiene una complejidad , mientras que el mismo algoritmo en la programación imperativa es Ω ( n ) . Agregar pereza al lenguaje FP haría que el algoritmo Ω ( n ) .Ω ( n logn )Ω ( n )Ω ( n )
Me gustaría ver esta referencia. La suposición habitual es que un acceso a una matriz de longitud en una RAM está en el tiempo O ( 1 ) y el equivalente en FP puro está en el tiempo O ( log n ) . Eso no es del todo cierto: el tiempo de acceso en una RAM está en O ( log m ) donde m es el tamaño de la memoria. Por supuesto, m ≥ n . En la práctica, acceder a un elemento de una matriz es mucho más rápido. Una razón sería que m está acotado pero ... también lo es n !norteO ( 1 )O ( logn )O ( logm )metrom ≥ nmetronorte
EDITAR: gracias por el enlace (el enlace para el documento sobre la pereza no está disponible, aquí hay otro ). Como se publicó en los comentarios y más arriba en mi respuesta, el modelo de RAM es un poco injusto para FP puro al proporcionar búsquedas de tiempo incluso cuando el tamaño de una dirección no está limitado. Todavía no entiendo cómo funciona el truco vago, pero creo que es importante tener en cuenta que esto es solo para este problema en particular.O ( 1 )