4 программы на прологе (база знаний, работа со списками, графические возможности и функция)! - Prolog

Узнай цену своей работы

Формулировка задачи:

1. Создать базу данных о заданной предметной области в виде множества фактов языка Пролог (не менее 5 фактов). Информацию о каждом компоненте БД представить в виде структуры. Разработать набор предикатов, осуществляющих взаимодействие с БД, при помощи которых можно реализовать все типы запросов, приведенные в варианте задания. Предметная область – учебная группа факультета. Каждая учебная группа может быть описана структурой: название факультета, код специальности, номер группы, состав группы. Состав группы может быть описан списком структур, описывающих отдельного студента: фамилия, имя, отчество, пол, год рождения, обучение на военной кафедре, сводная ведомость. Сводная ведомость может быть описана списком из следующих структур: предмет, оценка. Реализовать следующие типы запросов: а)Подсчитать число групп на указанном факультете; б)Найти всех студенток, обучающихся по указанной специальности; в)Найти группу, которая сдала больше всего предметов сессию; г)Найти всех студентов, имеющих задолженности; д)Найти всех студентов, обучающихся на военной кафедре. 2. Вычислите сумму первых n членов степенного ряда с общим членом (рис) 3. вывести на экран изображение 4. Напишите базу знаний, описывающую обращение списка (первый элемент становится последним). версии пролога: Visual Prolog 5.2 или ПРОЛОГ-Д. Буду очень признательна за любую помощь!

Решение задачи: «4 программы на прологе (база знаний, работа со списками, графические возможности и функция)!»

textual
Листинг программы
DOMAINS
predmet=v(string,integer)
predmeti=predmet*
student=s(string,string,string,string,integer,string,predmeti)
studenti=student*
list=integer*
slist=string*
 
PREDICATES
nondeterm g(string,integer,integer,studenti).
nondeterm chislo_grupp(string,integer).
nondeterm length(list,integer).
nondeterm vse_studentki(integer,slist).
nondeterm studentka(string,integer).
nondeterm member(student,studenti).
nondeterm member(predmet,predmeti).
nondeterm kolvo_predmetov(string,integer,integer).
nondeterm ocenka(string,integer,integer).
nondeterm bolshe(integer).
nondeterm bolshe_vsego_predmetov(string,integer).
nondeterm zadolznosti(slist).
nondeterm dvoika(string).
nondeterm na_voennoi(string).
nondeterm vse_na_voennoi(slist).
 
CLAUSES
g(mat,100,1,[s(alla, ivanovna, shajdurova,g,1990,n,[v(matan,5),v(algebra,4)]),s(sergey, aleksandrovich, vakurov,m,1991,y,[v(matan,3)]),s(vera, valerevna, patrusheva,g,1989,n,[v(matan,4),v(algebra,3)])]).
g(fiz,101,2,[s(ruslan, aleksandrovich, lutov,m,1990,y,[v(optika,3),v(termeh,2)]),s(kiril, ilich, petrov,m,1989,y,[v(termeh,4)])]).
g(inf,102,3,[s(sergey, vladimirovich, smolin,m,1989,y,[v(prolog,3),v(vbasic,4)]),s(anna, petrovna, sidyakina,g,1988,n,[v(prolog,3),v(vbasic,5)])]). 
 
length([],0).
length([_|Tail],N):-length(Tail,N1),N=N1+1.
 
chislo_grupp(F,N):-findall(Number,g(F,_,Number,_),List),length(List,N).
 
member(H,[H|_]).
member(H,[_|Tail]):-member(H,Tail).
 
studentka(Surname,S):-g(_,S,_,Students),member(s(_,_,Surname,g,_,_,_),Students).
 
vse_studentki(S,List):-findall(Surname,studentka(Surname,S),List).
 
ocenka(F,G,O):-g(F,_,G,Students),member(s(_,_,_,_,_,_,Ocenki),Students),member(v(_,O),Ocenki).
 
kolvo_predmetov(F,G,N):-findall(Ocenka,ocenka(F,G,Ocenka),List),length(List,N).
 
bolshe(N):-kolvo_predmetov(_,_,M), M>N.
 
bolshe_vsego_predmetov(F,G):-kolvo_predmetov(F,G,N),not(bolshe(N)).
 
dvoika(Surname):-g(_,_,_,Students),member(s(_,_,Surname,_,_,_,Ocenki),Students),member(v(_,2),Ocenki),!.
 
zadolznosti(List):-findall(Surname,dvoika(Surname),List).
 
na_voennoi(Surname):-g(_,_,_,Students),member(s(_,_,Surname,_,_,y,_),Students).
 
vse_na_voennoi(List):-findall(Surname,na_voennoi(Surname),List).
 
goal
%chislo_grupp(mat,N).
%vse_studentki(100,L).
%bolshe_vsego_predmetov(F,G).
%zadolznosti(L).
vse_na_voennoi(L).

Оцени полезность:

8   голосов , оценка 4 из 5