Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора_ФиЛП.doc
Скачиваний:
54
Добавлен:
16.09.2019
Размер:
150.02 Кб
Скачать

17)Префиксная нотация.

Польская нотация (запись), также известна как префиксная нотация (запись), это форма записи логических, арифметических и алгебраических выражений. Характерная черта такой записи — оператор располагается слева от операндов. Если оператор имеет фиксированную арность, то в такой записи будут отсутствовать круглые скобки и она может быть интерпретирована без неоднозначности. Польский логик Ян Лукасевич изобрел эту запись примерно в 1920, чтобы упростить пропозиц

18. Система предикатов

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

(defun правильный-размерчик? (арг)

(if (and (< арг 100) (> арг 50)) арг nil)

)

В этом примере функция возвращает аргумент, если его значение находится в диапазоне от 50 до 100, а если это ограничение не выполняется, возвращается NIL. Опознать предикат по имени функции обычно достаточно легко - в Common Lisp принято соглашение, по которому имена функций-предикатов заканчиваются буквой p (латинской). А в некоторых других диалектах, таких как например, Schema, имя предиката заканчивается вопросительным знаком.

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

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

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

На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом. (см.ниже Чистые функции)

λ-исчисления являются основой для функционального программирования, многие функциональные языки можно рассматривать как «надстройку» над ними[1].

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