Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lisp-ответы.docx
Скачиваний:
2
Добавлен:
12.09.2019
Размер:
58.14 Кб
Скачать
  1. Какие из перечисленных функций языка Лисп являются функциями с побочными эффектами: print, list, car, setq, do?

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

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

  1. Где целесообразно использовать рекурсивные функции?

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

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

Например (sumall 9) должно вернуть 45

Это можно решить циклически; мы решим рекурсивно.

Отметим два факта: 1. Если n=0, сумма чисел между 0 и n равна 0.  2. Если n>0, сумма чисел между 0 и n равна n плюс сумма чисел между 0 и n-1.

Эти два факта переводятся непосредственно в определение функции:

(defun sumall (n) (cond ((zerop n) 0) (t (+ n (sumall (- n 1))))))

Производится проверка n : равно нулю или нет. Если значение n=0, то функция возвращает 0 . В противном случае , функция вызывает сама себя для вычисления суммы чисел между 0 и n-1 и и добавляет n к этой сумме.

  1. Что такое префиксная и инфиксная форма записи, какая форма записи выражений используется в Лиспе?

Существуют три вида записи выражений. Инфиксная форма, в которой оператор расположен между операндами ("а + b");

Постфиксная форма, в которой оператор расположен после операндов ("а b + "); Данный тип записи называется обратной польской натацией.

Префиксная форма, в которой оператор расположен перед операндами ("+ а b"). Данный тип записи называется польской натацией.

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

( + x y ) ( - x y ) ( * x ( + x z ) )

Достоинства :

  • упрощается синтаксческий анализ выражений, так как по первому  символу текущего выражения система уже знает, с какой структурой  имеет дело.

  • появляется возможность записывать функции в виде списков, т.е. данные (списки) и программа (списки) представляются единым образом.

  • Чем отличаются атомы и символы?

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