- •Какие из перечисленных функций языка Лисп являются функциями с побочными эффектами: print, list, car, setq, do?
- •Где целесообразно использовать рекурсивные функции?
- •Достоинства :
- •Чем отличаются атомы и символы?
- •Что такое чистый функциональный язык? Пример чистого и «нечистого» языка.
- •Как отразился на функциональных языках тот факт, что лямбда-исчисление было придумано математиком?
- •Бесконечные структуры данных: где возможно использовать.
- •Что такое предикат? Какие из перечисленных функций являются предикатами: atom, listp, list, car, append?
- •Что такое взаимная рекурсия?
- •Что называют функциями с побочными эффектами?
- •Чем отличаются s-выражения и списки?
- •Основные особенности лямбда-исчисления.
- •Смысл использования функций высшего порядка.
- •Где используются продолжения? Что делать с продолжением, если функция не возвращает значения (например, вывод данных)?
- •В каком случае используется несколько рекурсивных ветвей?
- •Что такое параллельная рекурсия?
- •Что такое функционал?
- •Что в Лиспе понимается под формой?
- •Где чисто функциональные программы хранят свое текущее состояние?
- •Недостатки рекурсии.
- •Почему функциональное программирование называется функциональным?
- •Что такое оптимизация хвостовой рекурсии?
- •Где оправдан карринг?
- •Что общего между функциональным и объектно-ориентированным программированием?
- •Что такое родительская область видимости?
- •Что называют псевдофункциями?
Чем отличаются атомы и символы?
Атомы - это простейшие объекты Лиспа, из которых строятся остальные структуры.
Атомы бывают двух типов - символьные и числовые.
Символьные атомы - последовательность букв и цифр, при этом должен быть по крайней мере один символ отличающий его от числа.
ДЖОН АВ13 В54 10А
Символьный атом или символ - это не идентификатор переменой в обычном языке программирования. Символ как правило обозначает какой либо предмет, объект, вещь, действие.
Символьный атом рассматривается как неделимое целое.
К символьным атомам применяется только одна операция - сравнение.
Что такое чистый функциональный язык? Пример чистого и «нечистого» языка.
В чистом функциональном программировании оператор присваивания отсутствует, объекты нельзя изменять и уничтожать, можно только создавать новые путем декомпозиции и синтеза существующих. О ненужных объектах позаботится встроенный в язык сборщик мусора. Благодаря этому в чистых функциональных языках все функции свободны от побочных эффектов.
В качестве примера чистого функционального языка можно привести Haskell. Однако большинство функциональных языков являются гибридными и содержат свойства как функциональных, так и императивных языков. Яркие примеры — языки Scala и Nemerle. В них органично сочетаются характеристики как объектно-ориентированных языков, так и функциональных.
Как отразился на функциональных языках тот факт, что лямбда-исчисление было придумано математиком?
Бесконечные структуры данных: где возможно использовать.
Ленивые языки позволяют определять бесконечные структуры данных, что в энергичных языках сделать гораздо тяжелее. Например, рассмотрим список чисел Фибоначчи. Мы, очевидно, не можем вычислить бесконечный список за конечное время или сохранить его в памяти. В таких строгих языках, как Ява, мы просто определяем функцию, возвращающую определённое число из этой последовательности. В языке, подобном Хаскелю, мы можем переместиться на следующую ступеньку абстракции и просто определить бесконечный список чисел Фибоначчи. Поскольку язык ленивый, то на самом деле будут использованы только те элементы, которые реально использовались в программе. Этот приём позволяет избежать множества проблем и мелких частных случаев, и даёт возможность взглянуть на вещи с более общей точки зрения (например, можно использовать стандартные списочные функции для обработки бесконечных списков).
Что такое предикат? Какие из перечисленных функций являются предикатами: atom, listp, list, car, append?
Предикат в Лиспе - это функция,которая определяет обладает ли аргумент определенным свойством, и возвращает в качестве значения T или NIL.
ATOM проверяет , является ли аргумент атомом. Значение будет Т , если атом , и nil в обратном случае: ( atom 'x )
Что такое взаимная рекурсия?
взаимную рекурсию, когда в определении функции f вызывается некоторая функция g, которая в свою очередь содержит вызов функции f:
(… defmethod f … (… g …) …) (… defmethod g … (… f …) …)
Рекурсия является взаимной между двумя или более функциями, если они вызывают друг друга.