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