Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет обратной матрицы на Delphi + Пояснительная записка
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Файл записей с выводом обратного заголовка на Turbo Pascal

лабораторная часть 1 (5 задач) [SWI-Prolog]
Задание состоит из 5 задач, в которых требуется составить программы на Прологе. Первые две задачи требуют запрограммировать простые преди-каты. Следующие две - требуют написать простые программы. В последней задаче требуется составить более сложную программу на Прологе (как прави-ло, требуется определить несколько предикатов). При составлении программ (если не оговорено противное) можно использовать все встроенные предикаты Пролога. Тексты всех программ, если вы мыслите в духе логического про-граммирования, получаются небольшие.
SWI-Prolog не имеет стандартного help'а для Windows, для этого используется предикат help. Вызов help(<имя предиката>) выдает на экран информацию об этом предикате. Вызов help(7) выдает на экран список всех встроенных предикатов с комментариями. Текстовый файл руководства по SWI-Prolog - pl\library\manual. Отладку предикатов можно осуществлять с помощью предиката трассировки trace(<имя предиката>), трассировка преди-ката отключается - trace(<имя предиката>, -all).


Задание:
1. Напишите предикат p(+V, +X, -L) - истинный тогда и только тогда, когда список L получается из списка V после удаления всех вхождений X на всех уровнях, например, p([1, [2, 3, [1]], [3, 1]], 1, [[2, 3, []], [3]]) - истина.
2. Напишите обобщение предиката member, когда ищется элемент на всех уровнях в списке.
3. Встроенный предикат functor(+Term, ?Functor, ?Arity) определяет для за-данного составного терма Term его функтор Functor и местность Arity. Встроенный предикат arg(+N, +Term, ?Value) определяет для целого числа N и заданного составного терма Term его N-ый аргумент Value. Определите предикаты functor1 и arg1 - аналоги предикатов functor и arg через предикат univ (=..)
4. Напишите предикат range(?M, ?N, ?L), истинный тогда и только тогда, ко-гда L - список целых чисел, расположенных между M и N включительно (предикат должен допускать различное использование, когда не менее двух из трех аргументов конкретизованы). (Указание. Используйте предикаты var(+X) и nonvar(+X)).
5. Определим операторы:
:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).




Булева формула есть терм, определяемый следующим образом: кон-станты true и false - булевы формулы; если X и Y - булевы формулы, то и X v Y, X & Y, ~X - булевы формулы, здесь v и & - бинарные инфиксные операторы дизъюнкции и конъюнкции, а ~ - унарный оператор отрицания.
Напишите программу, задающую отношение negation_inward(+F1,-F2), которое выполнено, если логическая формула F2 получается из логической формулы F1 внесением всех операторов отрицания внутрь конъюнкций и дизъюнкций.



Исходный код программы:
p([X|Tail],X,NewTail):-!,p(Tail,X,NewTail).%esli golova iskomii simvol,
%to otvetom budet obrabotanni hvost
p([H|Tail],X,[NewH|NewTail]):-p(H,X,NewH),p(Tail,X,NewTail),!.%esli ze golova ne iskomii simvol,
%to ochishwem ee(srabotaet tolko esli ona - nepustoi spisok), ochishaem hvost i skladivaem
p(H,_,H).%esli golova ne iskomii simvol ili pustoi spisok, to nichego ne delaem
%?-p([1,[2,3,[1]],[3,1]],1, L),write(L).

member(H,H).%tut ponaytno
member(H,[A|B]):-member(H,A);member(H,B).%esli iskomii element vstrechaetsya v golove ili v hvoste,
%to on vstrechaetsya vo vsem spiske
member(H,[List]):-member(H,List).%eto esli spisok vida [[1,2,3,4,5]], to otbrasivaem odni skobki
%?-member(1,[5,[3,7,[[3,5,1],8]]]).

functor1(F,H,A):-F=..[H|Tail],length(Tail,A).

%element - vspomogatelnii predicat, vozvrashaet N-i element
element([H|_],1,H):-!.%pervii element - golova
element([_|Tail],N,E):-N1 is N-1, element(Tail,N1,E).%inache umenshaem index na 1 i ishem v hvoste

arg1(N,F,E):-F=..[_|Tail],element(Tail,N,E).

% ne znayu zachem v predicate range ispolzovat var i nonvar,i tak rabotaet

range(B,B,[B]):-!.
range(A,B,[A|Tail]):-A1 is A+1,range(A1,B,Tail).
%?-range(1,5,L).
%?-range(1,M,[1,2,3,4,5]).
%?-range(N,M,[1,2,3,4,5]).

:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).

%ne mogu garantirovat, chto imelos v vidu imeno tak vnosit,
%ya ispolzuyu zakoni Morgana i eshe ochevidnie fakti
negation_inward(~true,false):-!.
negation_inward(~false,true):-!.
negation_inward(~(A&B),NeA v NeB):-!,negation_inward(~A,NeA),negation_inward(~B,NeB).
negation_inward(~(A v B),NeA & NeB):-!,negation_inward(~A,NeA), negation_inward(~B,NeB).
negation_inward(~(~A),NewA):-negation_inward(A,NewA).
negation_inward(A&B,NewA & NewB):-!,negation_inward(A,NewA),negation_inward(B,NewB).
negation_inward(A v B, NewA v NewB):-!,negation_inward(A,NewA),negation_inward(B,NewB).
negation_inward(F,F).

%?- negation_inward(~(true&false& ~(false v ~(true v false))),Ans).











Опубликовал Kest March 13 2011 16:08:17 · 0 Комментариев · 14089 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
C++ Стандартная б...
Основы Delphi. Пр...
Java 2 - Эффектив...
Мод "проверочный ...
WAP версия сайта
Zoom [Исходник на...
Современное проек...
C++ для начинающих
iComm v.6.1 - выв...
Паскаль и Дельфи....
Как программирова...
CLR via C#
DFileDeleter
Шейдеры в Delphi
45 уроков по дельфи
JanReplace
Crystal Button
RxLIB
PBEditPack
CodeGear RAD Stud...

Топ загрузок
Приложение Клие... 100800
Delphi 7 Enterp... 98063
Converter AMR<-... 20302
GPSS World Stud... 17067
Borland C++Buil... 14261
Borland Delphi ... 10388
Turbo Pascal fo... 7398
Калькулятор [Ис... 6093
Visual Studio 2... 5241
Microsoft SQL S... 3676
Случайные статьи
Изменение значений...
Установка Apache +...
Заказчик на месте ...
Too many nested files
Точки останова в с...
Синхронизация в яд...
Функция Port Security
Безопастность Dial...
Совмещение имен в IDL
Подсчет числа импу...
Попытк обыграть си...
Получая пакеты, бр...
Решение логических...
Разделяемая память.
telling (X)
Сортировка массивов
Цели, стоявшие пер...
Создание БД
Как решать задачи ...
по адресу http://www
Класс ТРеn
Об этой книге XXXII
ОБЯЗАТЕЛЬНЫЕ ИДЕНТ...
Инструктирование
Какие возможности ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?