Главная

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

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

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

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

ТОР 5 статей:

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

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

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

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

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

КАТЕГОРИИ:






Запишите общую форму определения рекурсивной функции.




Общая форма определения рекурсионной функции

(defun <имя> <параметры>
(cond (терминальная ветвь1)
(терминальная ветвь2)
...................
(терминальная ветвьn)
(рекурсивная ветвь1)
(рекурсивная ветвь2)
....................
(рекурсивная ветвьn)))

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

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

  • Ветвь 1. Цель найдена и надо вернуть ответ
  • Ветвь 2. Цель не найдена и нет больше элементов.

24. Что называется мусором? Привести пример.

Мусором называются Лисп-ячейки, недоступные через символы и

указатели. Мусор образуется в двух случаях:

•Вычисленная структура не сохраняется с помощью SETQ;

•Теряется ссылка на старое значение в результате побочного эффекта

нового вызова SETQ или другой функции.

Пример1.

Значение вызова (list ‘a ‘b) лишь печатается, после чего

соответствующая ему структура ‘(a b) остается в памяти мусором.

 

Память, которая больше не нужна, называется garbage (мусор), И операции по ее очистке называются garbage collection, или GC.

 

25. Почему функциональное программирование называется функциональным?

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

26. Что такое оптимизация хвостовой рекурсии?

Хвостовая рекурсия — специальный случай рекурсии, при котором рекурсивный вызов функцией самой себя является её последней операцией.[1] Подобный вид рекурсии примечателен тем, что может быть легко заменён на итерацию, что реализовано во многих

оптимизирующих компиляторах.

 

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

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

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

Предположим, что на последнем шаге выполнения процедура B вместо процедуры C вызывает себя. Получается, что когда B вызывает B, стек (состояние) для вызывающей B должен быть заменен стеком для вызванной B. Это очень простая операция, просто аргументам присваиваются новые значения и затем выполнение процесса возвращается в начало процедуры B.

Эта операция называется оптимизацией хвостовой рекурсии (tail recursion optimization) или оптимизацией последнего вызова (last-call optimization).

 

 

27. Где оправдан карринг?

28. Что общего между функциональным и объектно-ориентированным программированием?

Если замыкание обращается к переменной, которой нет в локальной области видимости, тогда оно принимает во внимание родительскую область. Вот и всё! Замыкание связывает функциональный мир с миром ООП. Каждый раз, когда вы создаёте класс, который хранит некоторое состояние, и передаёте его куда-то, вспомните про замыкания. Замыкание — это всего лишь объект, который создаёт «атрибуты» на лету, забирая их из области видимости, чтобы вам не пришлось делать это самим.

29. то называется рекурсией более высокого порядка?

Рекурсию более высокого порядка, когда аргументом рекурсивного вызова является рекурсивный вызов:
(defun f...
...(f...(f...)...)

30. Что такое CDR-рекурсия, и в каком случае она применяется?

Рассмотрена рекурсивная обработка чисел. Когда информация представлена в виде списка, то появляется необходимость рекурсивной обработки списков. Основная рекурсия над спискамиCDR рекурсия.

31. Какая рекурсия называется простой?

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

 

32. Какой вариант предиката предпочтительнее и почему?

i. а) (defun pred1 (x) б) (defun pred2 (x)

1. (and (numberp x) (plusp x))) (and (plusp x) (numberp x)))

33. Для чего используется параллелизм?

 

34. Ленивые вычисления: преимущества и недостатки

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

Ленивые вычисления могут применяться в тех случаях, когда вызов функции связан с большими накладными расходами, которые было бы полезно отложить «на потом», поскольку при использовании ленивых вычислений ленивое значение может никогда не понадо- биться. Примером ленивого поведения является условный оператор if...then...else – в случае истинности условного выражения второе под- выражение никогда не вычисляется. Ленивые вычисления позволяют распространить такое поведение «вычислений по необходимости» на весь программный код.

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

 

35. Что такое родительская область видимости?

 

Родительская область видимости - это функция, в которой было объявлено замыкание (не обязательно та же самая, из которой оно было вызвано). (в php)

 

36. Что называют псевдофункциями?

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






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

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