Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лисп ответы.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
83 Кб
Скачать
☆

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. Пролог применяется главным образом в приложениях типа экспертных систем и интеллектуальных баз данных, он также полезен и для  разработки обычных приложений. Этот язык использует более быстрые механизмы получения логического вывода, чем большинство других языков. Его можно применять для решения следующих задач:

  • быстрая разработка прототипов прикладных программ;

  • автоматический перевод с одного языка на другой;

  • создание естественно-языковых интерфейсов для существующих систем;

  • символьные вычисления для решения уравнений, дифференцирования и интегрирования;

  • проектирование динамических реляционных баз данных;

  • экспертные системы и оболочки экспертных систем;

  • автоматизированное управление производственными процессами;

  • автоматическое доказательство теорем;

  • полуавтоматическое составление расписаний;

  • системы автоматизированного проектирования;

  • базирующееся на знаниях программное обеспечение;

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

А вот для чего не подходит этот язык, так это большой объем арифметических вычислений (обработка аудио, видео и т.д.); написание драйверов. Так же вряд ли можно применить пролог для написания программ бухгалтерского и складского учета.

Программирование в Прологе существенно отличается от обычного программирования и требует несколько другого подхода в написании программы. Здесь утверждаются логические отношения, а Пролог используется, чтобы определить, являются ли некоторые конструкции истинными, и если да, то каким образом был получен такой вывод. Отсюда следует декларативный стиль программирования. Язык пролог является представителем семейства языков логического программирования и в сравнении с традиционными языками программирования, предназначенными для записи алгоритмов, такими как Бейсик, Фортран, Паскаль, Си, обладает существенными особенностями:

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

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