
- •1) Рекурсия в программировании
- •4) Основы языка Лисп
- •5)Цикл в Лиспе
- •6. Рекурсии в Прологе.
- •7.Факты в Прологе
- •9. Списки в Прологе.
- •10. Списки в Лиспе
- •11. Типы данных Turbo Prolog
- •12. Типы данных в Лиспе
- •13. Опции главного меню.
- •14.Работа с экраном в Лиспе
- •15.Интеллектуальные экспертные системы
- •17)Префиксная нотация.
- •18. Система предикатов
- •21) Элементы структурного программирования
- •22)Факты, вопросы, правила.
- •24) Функции, определенные пользователем
- •26. Ввод-вывод в Лиспе.
- •27) Ввод и вывод в Турбо-Прологе
- •28)Правила в Лиспе
- •30) Функционалы в Лиспе
- •31) Разрушающие функции
- •32. Логические константы в Лисп.
- •33) Управляющая структура cond в Лисп
- •34. Циклы в Лисп
17)Префиксная нотация.
Польская нотация (запись), также известна как префиксная нотация (запись), это форма записи логических, арифметических и алгебраических выражений. Характерная черта такой записи — оператор располагается слева от операндов. Если оператор имеет фиксированную арность, то в такой записи будут отсутствовать круглые скобки и она может быть интерпретирована без неоднозначности. Польский логик Ян Лукасевич изобрел эту запись примерно в 1920, чтобы упростить пропозиц
18. Система предикатов
Под предикатом в Лиспе понимают функцию, которая предназначена для проверки выполнения некоторого условия и возвращает T в случае выполнения этого условия и NIL в противном случае. Кроме того, поскольку любое отличное от NIL значение в функциях сравнения интерпретируется как T, предикат может выглядеть, например, следующим образом:
(defun правильный-размерчик? (арг)
(if (and (< арг 100) (> арг 50)) арг nil)
)
В этом примере функция возвращает аргумент, если его значение находится в диапазоне от 50 до 100, а если это ограничение не выполняется, возвращается NIL. Опознать предикат по имени функции обычно достаточно легко - в Common Lisp принято соглашение, по которому имена функций-предикатов заканчиваются буквой p (латинской). А в некоторых других диалектах, таких как например, Schema, имя предиката заканчивается вопросительным знаком.
20 Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательное изменение состояний (в значении, подобном таковому в теории автоматов). При необходимости, в функциональном программировании вся совокупность последовательных состояний вычислительного процесса представляется явным образом, например как список.
Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма).
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом. (см.ниже Чистые функции)
λ-исчисления являются основой для функционального программирования, многие функциональные языки можно рассматривать как «надстройку» над ними[1].