- •3.В языке lisp лямбда-выражение имеет вид: (lambda (x1 x2 ... Xn) fn)
- •20. Применяющие функционалы дают возможность интерпретировать и преобразовывать данные в программу и применять её в вычислениях.
- •Пример,
- •27. В Прологе отношение между объектами называется фактом (fact).
- •27 April 1992
- •Определение.
- •37. Процедурная семантика (процедурный смысл) пролог-программы определяет , как пролог-программа отвечает на вопросы. Ответитиь на вопрос -зто значит удовлетворить цели.
20. Применяющие функционалы дают возможность интерпретировать и преобразовывать данные в программу и применять её в вычислениях.
Применяющие функционалы.
APPLY есть функция двух аргументов, из которых первый представляет собой функцию, которая применяется к элементам списка –второго аргумента : (apply <функция> <список>).
Пример : (apply ‘+ ‘(2 3)) дает в качестве результата 5.
FUNCALL по своему действию аналогичен APPLY, но аргументы для вызываемой функции он принимает не списком,а по отдельности: (funcall<функция> <арг1> … <аргN>).
Примеры : (funcall‘+ 2 3) дает в качестве результата 5.
(funcall‘+ ‘(2 3)) дает в качестве результата (2 3).
Различие между APPLY и FUNCALL состоит в обязательности списочного представления аргументов у APPLY. FUNCALL аналогичен по действию APPLY, но аргументы для вызываемой функции принимаются не списком, а по отдельности.
Следует отметить, что функциональным аргументом может быть только “настоящая”функция. Специальные формы, такие как QUOTE, SETQ и макросы для этих целей не подходят.
Важный класс функционалов используемых в лиспе - отображающие функционалы (МАР функционалы) МАР функционалы - функции, которые некоторым образом отображают (map) список в новый список.
MAPCAR один из основных отображающих функционалов.
(MAPCAR f '(x1 x2 x3 ... xN))
MAPCAR функционал имеет два аргумента. Первый аргумент - функция, а второй - аргумент список.
Когда MAPCAR выполняется , функция определенная первым аргументом применяется к каждому элементу, списка, определенному вторым аргументом и результат помещает (отображает) в новый список. |
Пример,
|
* (mapcar 'add1 '( 1 2 3)) (2 3 4) (MAPCAR f '(x1 x2 x3 ... xN)) эквивалентно (list (f 'x1) (f 'x2) .... (f 'xN)) |
Можно использовать в функциях
|
(defun list-add1 (lis) (mapcar 'add1 lis)) * (list-add1 '(1 2 3)) (2 3 4) |
В качестве аргумента для MAPCAR может быть использовано значение символа
|
* (setq x '(a b (d))) * (setq y 'atom) * (mapcar y x) (t t nil) |
26. Пролог применяется главным образом в приложениях типа экспертных систем и интеллектуальных баз данных, он также полезен и для разработки обычных приложений. Этот язык использует более быстрые механизмы получения логического вывода, чем большинство других языков. Его можно применять для решения следующих задач:
быстрая разработка прототипов прикладных программ;
автоматический перевод с одного языка на другой;
создание естественно-языковых интерфейсов для существующих систем;
символьные вычисления для решения уравнений, дифференцирования и интегрирования;
проектирование динамических реляционных баз данных;
экспертные системы и оболочки экспертных систем;
автоматизированное управление производственными процессами;
автоматическое доказательство теорем;
полуавтоматическое составление расписаний;
системы автоматизированного проектирования;
базирующееся на знаниях программное обеспечение;
организация сервера данных или, точнее, сервера знаний, к которому может обращаться клиентское приложение, написанное на каком-либо языке программирования.
А вот для чего не подходит этот язык, так это большой объем арифметических вычислений (обработка аудио, видео и т.д.); написание драйверов. Так же вряд ли можно применить пролог для написания программ бухгалтерского и складского учета.
Программирование в Прологе существенно отличается от обычного программирования и требует несколько другого подхода в написании программы. Здесь утверждаются логические отношения, а Пролог используется, чтобы определить, являются ли некоторые конструкции истинными, и если да, то каким образом был получен такой вывод. Отсюда следует декларативный стиль программирования. Язык пролог является представителем семейства языков логического программирования и в сравнении с традиционными языками программирования, предназначенными для записи алгоритмов, такими как Бейсик, Фортран, Паскаль, Си, обладает существенными особенностями:
программа на Прологе не является алгоритмом, а представляет собой запись условия задачи на языке формальной логики (т.е. это дескриптивный, описательный язык программирования);
язык Пролог предназначен не для решения вычислительных или графических задач, а для решения логических задач, для моделирования процесса логического умозаключения человека; вычисления же и графические построения выполняются в Прологе как побочный продукт логического вывода;
