- •Какие из перечисленных функций языка Лисп являются функциями с побочными эффектами: print, list, car, setq, do?
- •Где целесообразно использовать рекурсивные функции?
- •Достоинства :
- •Чем отличаются атомы и символы?
- •Что такое чистый функциональный язык? Пример чистого и «нечистого» языка.
- •Как отразился на функциональных языках тот факт, что лямбда-исчисление было придумано математиком?
- •Бесконечные структуры данных: где возможно использовать.
- •Что такое предикат? Какие из перечисленных функций являются предикатами: atom, listp, list, car, append?
- •Что такое взаимная рекурсия?
- •Что называют функциями с побочными эффектами?
- •Чем отличаются s-выражения и списки?
- •Основные особенности лямбда-исчисления.
- •Смысл использования функций высшего порядка.
- •Где используются продолжения? Что делать с продолжением, если функция не возвращает значения (например, вывод данных)?
- •В каком случае используется несколько рекурсивных ветвей?
- •Что такое параллельная рекурсия?
- •Что такое функционал?
- •Что в Лиспе понимается под формой?
- •Где чисто функциональные программы хранят свое текущее состояние?
- •Недостатки рекурсии.
- •Почему функциональное программирование называется функциональным?
- •Что такое оптимизация хвостовой рекурсии?
- •Где оправдан карринг?
- •Что общего между функциональным и объектно-ориентированным программированием?
- •Что такое родительская область видимости?
- •Что называют псевдофункциями?
Где используются продолжения? Что делать с продолжением, если функция не возвращает значения (например, вывод данных)?
Продолжение представляет состояние программы в определённый момент, которое может быть сохранено и использовано для перехода в это состояние. Продолжения содержат всю информацию, чтобы продолжить выполнения программы с определённой точки. Состояние глобальных переменных обычно не сохраняется, однако для функциональных языков это несущественно. Продолжения похожи на goto Бейсика, так как также позволяют перейти в любое место программы. Но продолжения, в отличие от goto, позволяют перейти только в участок программы с определённым состоянием, которое должно быть сохранено заранее, в то время, как goto позволяет перейти в участок программы с неинициализированными переменными.
Программирование в стиле продолжений это программирование с использованием функции, передаваемой в качестве аргумента другой функции, и используемой для гибкого развития хода вычислений. Поскольку продолжение не возвращает управления, такой стиль применим лишь в языках с оптимизацией хвостовой рекурсии
В каком случае используется несколько рекурсивных ветвей?
Несколько рекурсивных ветвей может понадобиться, если функция обрабатывает все элементы в структуре, но использует некоторые элементы отлично от других. В этом случае составляются два рекурсионных отношения.
Что такое параллельная рекурсия?
Рекурсию называют параллельной, если она встречается одновременно в
нескольких аргументах функции:
(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))))))
Что такое функционал?
Функции, которые позволяют вызывать другие функции, т. е. применять
функциональный аргумент к его параметрам называют применяющими
функционалами. Они дают возможность интерпретировать и преобразовывать
данные в программу и применять ее в вычислениях.
Функционал – функция, имеющая функциональный аргумент. Функциональным аргумент - аргумент, значением которого является функция
Функции, принимающие функциональные аргументы, называются функциями высших порядков или функционалами.
Что в Лиспе понимается под формой?
S-выражения, которые могут быть вычислены интерпретатором, называют формами.
Под формой понимается такое символьное выражение, значение которого может быть найдено интерпретатором. Ранее уже использовали наиболее простые формы языка: константы, переменные, лямбда-вызовы, вызовы функций и их сочетания. Кроме них были рассмотрены некоторые специальные формы, такие как ' и setq, трактующие свои аргументы иначе, чем обычные функции. Лямбда-выражение без фактических параметров не является формой.