Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Смысл использования функций высшего порядка.




 

Одним из главных преимуществ LISP и других функциональных языков программирования является возможность определения функций, параметрами которых являются другие функции, а также функций, возвращающих функцию в качестве результата. Такие функции называются функциями высшего порядка (higher-order functions) и составляют важное средство реализации процедурной абстракции.

 

В то время как основной способ использования функций – это вызов их с указанием имени, существуют ситуации, когда было бы полезно рассматривать функции как данные. Например, вы можете передать одну функцию в качестве аргумента другой функции, вы можете написать общую функцию сортировки, и предоставить пользователю возможность указания функции для сравнения двух элементов. Так что один и тот же алгоритм может использоваться с разными функциями сравнения. Аналогично, обратные вызовы (callbacks) и FIXME hooks зависят от возможности хранения ссылок на исполняемый код, который можно выполнить позже. Поскольку функции уже являются стандартным способом представления частей кода, имеет смысл разрешить рассмотрение функций как данных.9)

 

14. Где используются продолжения? Что делать с продолжением, если функция не возвращает значения (например, вывод данных)?

 

Продолжение представляет состояние программы в определённый момент, которое может быть сохранено и использовано для перехода в это состояние. Продолжения содержат всю информацию, чтобы продолжить выполнения программы с определённой точки. Состояние глобальных переменных обычно не сохраняется, однако для функциональных языков это несущественно. Продолжения похожи на goto Бейсика, так как также позволяют перейти в любое место программы. Но продолжения, в отличие от goto, позволяют перейти только в участок программы с определённым состоянием, которое должно быть сохранено заранее, в то время, как goto позволяет перейти в участок программы с неинициализированными переменными.

Программирование в стиле продолжений это программирование с использованием функции, передаваемой в качестве аргумента другой функции, и используемой для гибкого развития хода вычислений. Поскольку продолжение не возвращает управления, такой стиль применим лишь в языках с оптимизацией хвостовой рекурсии

 

15. В каком случае используется несколько рекурсивных ветвей?

Несколько рекурсивных ветвей может понадобиться, если функция обрабатывает все элементы в структуре, но использует некоторые элементы отлично от других. В этом случае составляются два рекурсионных отношения.

16. Что такое параллельная рекурсия?

Рекурсию называют параллельной, если она встречается одновременно внескольких аргументах функции: (DEFUN f......(g... (f...) (f...)...)...) Рассмотрим использование параллельной рекурсии на примерепреобразования списочной структуры в одноуровневый список: (DEFUN PREOBR (L) (COND ((NULL L) NIL) ((ATOM L) (CONS (CAR L) NIL)) (T (APPEND (PREOBR (CAR L)) (PREOBR (CDR L))))))

17. Что такое функционал?

Функции, которые позволяют вызывать другие функции, т. е. применятьфункциональный аргумент к его параметрам называют применяющимифункционалами. Они дают возможность интерпретировать и преобразовыватьданные в программу и применять ее в вычислениях.

 

Функционал – функция, имеющая функциональный аргумент. Функциональным аргумент - аргумент, значением которого является функция

Функции, принимающие функциональные аргументы, называются функциями высших порядков или функционалами.

18. Что в Лиспе понимается под формой?

S-выражения, которые могут быть вычислены интерпретатором, называют формами.

 

Под формой понимается такое символьное выражение, значение которого может быть найдено интерпретатором. Ранее уже использовали наиболее простые формы языка: константы, переменные, лямбда-вызовы, вызовы функций и их сочетания. Кроме них были рассмотрены некоторые специальные формы, такие как ' и setq, трактующие свои аргументы иначе, чем обычные функции. Лямбда-выражение без фактических параметров не является формой.

 

19. Где чисто функциональные программы хранят свое текущее состояние?

Оказывается, что функциональные программы могут хранить состояние, только они не используют для этого переменные. Они используют функции. Состояние хранится в параметрах функции, в стеке. Если хотите сохранить состояние, чтобы потом изменить его через время, то нужно написать рекурсивную функцию.
В функциональной программе всё состояние хранится в стеке в виде аргументов функций.

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных