В достаточно мощном функциональном языке программирования (например, с типами данных для реализации замыканий ) вы можете исключить все виды использования более высокого порядка путем преобразования нефункционализации . Поскольку этот метод используется для компиляции такого рода языка, вы можете разумно предположить, что это не влияет на производительность и что в этом параметре более высокий порядок не делает язык менее мощным. Однако это влияет на то, как писать код.
Однако, если язык недостаточно силен, то да, высший порядок обеспечивает выразительную силу. Рассмотрим лямбда-исчисление: без какой-либо функции высшего порядка он действительно ничего не может сделать, в основном потому, что самые основные типы данных (целые, логические) реализованы с использованием функций.
В заключение, это действительно зависит от языка.
Выше мой ответ. Ниже комментарий об обычном предположении о императивных языках.
об алгоритме, который на неленивом функциональном языке программирования имеет сложность , тогда как тот же алгоритм в императивном программировании - Ω ( n ) . Добавление ленивости к языку FP сделало бы алгоритм Ω ( n ) .Ω ( n logн )Ω ( n )Ω ( n )
Я хотел бы видеть эту ссылку. Обычное предположение состоит в том, что доступ к массиву длины в ОЗУ осуществляется за время O ( 1 ), а эквивалент в чистой FP - за время O ( log n ) . Это не совсем верно: время доступа в RAM находится в O ( log m ), где m - размер памяти. Конечно, m ≥ n . На практике доступ к элементу массива намного быстрее. Причиной может быть то, что m ограничено, но ... как и n !NO ( 1 )O ( журналN)O ( журналм )мm ≥ nмN
O ( 1 )