Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lisp-ответы.docx
Скачиваний:
2
Добавлен:
12.09.2019
Размер:
58.14 Кб
Скачать
  1. Чем отличаются атомы и символы?

Атомы - это простейшие объекты Лиспа, из которых строятся остальные структуры.

Атомы бывают двух типов - символьные и числовые.

Символьные атомы - последовательность букв и цифр, при этом должен быть по крайней мере один символ отличающий его от числа.

ДЖОН АВ13 В54 10А

Символьный атом или символ - это не идентификатор переменой в обычном языке программирования. Символ как правило обозначает какой либо предмет, объект, вещь, действие.

Символьный атом рассматривается как неделимое целое.

К символьным атомам применяется только одна операция - сравнение.

  1. Что такое чистый функциональный язык? Пример чистого и «нечистого» языка.

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

В качестве примера чистого функционального языка можно привести Haskell. Однако большинство функциональных языков являются гибридными и содержат свойства как функциональных, так и императивных языков. Яркие примеры — языки Scala и Nemerle. В них органично сочетаются характеристики как объектно-ориентированных языков, так и функциональных.

  1. Как отразился на функциональных языках тот факт, что лямбда-исчисление было придумано математиком?

  1. Бесконечные структуры данных: где возможно использовать.

Ленивые языки позволяют определять бесконечные структуры данных, что в энергичных языках сделать гораздо тяжелее. Например, рассмотрим список чисел Фибоначчи. Мы, очевидно, не можем вычислить бесконечный список за конечное время или сохранить его в памяти. В таких строгих языках, как Ява, мы просто определяем функцию, возвращающую определённое число из этой последовательности. В языке, подобном Хаскелю, мы можем переместиться на следующую ступеньку абстракции и просто определить бесконечный список чисел Фибоначчи. Поскольку язык ленивый, то на самом деле будут использованы только те элементы, которые реально использовались в программе. Этот приём позволяет избежать множества проблем и мелких частных случаев, и даёт возможность взглянуть на вещи с более общей точки зрения (например, можно использовать стандартные списочные функции для обработки бесконечных списков).

  1. Что такое предикат? Какие из перечисленных функций являются предикатами: atom, listp, list, car, append?

Предикат в Лиспе - это функция,которая определяет обладает ли аргумент определенным свойством, и возвращает в качестве значения T или NIL.

ATOM проверяет , является ли аргумент атомом. Значение будет Т , если атом , и nil в обратном случае:  ( atom 'x )

  1. Что такое взаимная рекурсия?

взаимную рекурсию, когда в определении функции f вызывается некоторая функция g, которая в свою очередь содержит вызов функции f:

(… defmethod f …  (… g …) …) (… defmethod g …  (… f …) …)

Рекурсия является взаимной между двумя или более функциями, если они вызывают друг друга.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]