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

Семантика логических программ

Семантика поставляет значение программе.

Операционное значение логической программы Р – множество основных целей, являющихся примерами вопросов, которые Р решает. Каждая логическая программа имеет вполне определенное значение. Оно может совпадать и не совпадать с тем, к чему стремился программист. Р правильна относительно подразумеваемых значений М, если множество основных целей, выводимых Р, совпадают с М.

Сравнение с другими языками программирования

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

Рекурсия – иной характер.

В обычных языках – если не может быть продолжено, то ошибка выполнения.

А в Прологе – возврат и попытка продолжить вычисление по другому пути.

Как и в Лиспе объявления данных нет.

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

Если переменной сопоставлен объект, то эта переменная больше никогда не сможет ссылаться на другой объект (разрушающая присваивание).

Обработка данных полностью заключена в попытке унификации объекта с аргументом предиката.

Гибкая система организации структур данных (поддерживаются выражения).

Факторная:

факторная(0,1).

факторная(N,F):-N>0, N1:=N-1, факторная(N1,F1), F:=N*F1.

Отсутствуют конструкции итераторов (циклов).

В некоторых случаях итеративные операторы предпочтительнее рекурсивных.

Отсутствуют локальные переменные (удерживание промежуточных результатов).

Факторная (рекурсивный вариант):

факторная(I,N,D,F).

факторная(N,F):-факторная(0,N,1,F).

факторная(I,N,D,F):-I<N, I1:=I+1, D1:=D*I1, факторная(I1,N,D1,F).

факторная(N,N,F,F).

(если F=факторная(N), I – номер итерации, D – предыдущее наложение значения факториала).

Стиль при написании логических программ

Программы на декларативном языке получаются более короткими.

Первая строчка – комментарий (что за программа, кто автор и т.д.).

Правила именования

Единообразно именуем константы, элементы и т.д.

Нужно употреблять слова, описывающие взаимосвязь.

Имена переменных должны подсказывать, как их использовать (мнемонические имена).

Безымянные (анонимные) переменные входят в программу лишь однократно, можно вместо имен использовать символ подчеркивания.

chlen(X,[X|_]).

chlen(X,[_|Ys]):-chlen(X,Ys).

foo(….):-

‾‾‾‾|p1(….),

если |p2(….),

не умещается | ….

|pₓ(….).

Заголовки выравниваются.

Цели – с отступом (отдельная строчка для каждой).

Вертикальные отступы

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

Можно просмотреть стек вызовов.

В некотором смысле программы являются выполняемыми спецификациями.

Но также существуют методы отладки и тестирования.

В чем разница?

Существует преимущество в простоте записи и скорости отладки по сравнению с языками более низкого уровня.

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

Для хороших программистов Пролог – не просто язык для записи машинных команд, но и формализм, позволяющий записать и реализовать идеи (инструмент мышления).

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

Размер программы может зависеть от разных факторов.

Опытный программист на Прологе может написать программу, занимающую несколько строк.

Правило программного модуля – текст модуля должен быть обозрим.

! Независимо от языка программирования, его ясности и изящества, высокого уровня, всегда найдутся программисты, пишущие на этом языке грузные, неестественные, не читаемые программы.

Пролог не является исключением.

Но используемый язык влияет на мышление.

Мы уверены, что для большинства задач, имеющих изящное решение, существует запись решения на Прологе.

Изящное решение:

- правильность

- лаконичность

- простота

- понятность

- эффективность

Не обязательно должны присутствовать эстетика и практичность.