Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 63561
Модуль Forms 63387
ТЕХНОЛОГИИ ДОСТ... 60159
Пример работы с... 59254
Имитационное мо... 55607
Реклама
Прикольные поздравления с днем рождения молодому мужчине glistof.net.
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...
Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
лабораторная часть 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 19:08:17 · 0 Комментариев · 10028 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PHP глазами хакера
Мод "проверочный ...
Использование Lis...
Crystal Button
Run
Adapter (пример D...
JanComp
Просмотр коммент...
Мониторинг сервер...
Исправление проц...
XPButtons
3d Tank [Исходник...
База каталогов ( ...
Доступа к БД Fire...
Proeffectimage
PDJPack
Java 2. Наиболее ...
Архив Апгрейтов с...
C++ для начинающих
Пишем программы и...

Топ загрузок
Приложение Клие... 100444
Delphi 7 Enterp... 85608
Converter AMR<-... 20065
GPSS World Stud... 12468
Borland C++Buil... 11525
Borland Delphi ... 8478
Turbo Pascal fo... 7020
Visual Studio 2... 4987
Калькулятор [Ис... 4723
FreeSMS v1.3.1 3533
Случайные статьи
Слоты 777
Денежные слоты
Как использовать п...
MATCH (СИНХРОНИЗИР...
2.1. ЦЕЛЬ: ХРАНЕНИ...
Успех в стратегии ...
Лучшие слоты
Программа cursive ...
Сохранение документа
Использование мето...
Версия XHTML 1.0 S...
Определение вторич...
Структурная обрабо...
Секреты *. dat файла
Широкие потоки
Другие разделы полей
Изменение направле...
Процедура SetAspec...
Разобрать список н...
Оптимизация кода
Два миниатюрных ин...
Комбинации клавиш
Логическая головол...
Уменьшение эффекта...
Упражнение 2: прое...
Статистика



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


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