2013-11-24 4 views
0
Представление

знаний:Prolog Список SWI создание

student('John','f214','A'). 
student('John','f222','B'). 
student('John','f213','C'). 
student('John','f343','D'). 

subject(f214,3). 
subject(f222,3). 
subject(f213,3). 
subject(f343,3). 

Из данного представления знаний в Прологе SWI Как я могу создать список курсов [F214, F222, F213, f343] и список соответствующих классов [ 'A' , «B», «C», «D»]

+1

Я не понимаю, как курс будет присвоен один класс, это своего рода агрегации, таких как учащиеся среднего класса, которые посещали этот курс, т? – rano

ответ

0

Вы можете использовать findall/3:

?- findall(Course, subject(Course, _), Courses). 
Courses = [f214, f222, f213, f343]. 

?- findall(Grade, student(_,Grade,_), Grades). 
Grades = [f214, f222, f213, f343]. 

?- findall(course_grade(Course, Grade), (subject(Course,_), student(_,Course,Grade)), CoursesGrades). 
CoursesGrades = [course_grade(f214, 'A'), course_grade(f222, 'B'), course_grade(f213, 'C'), course_grade(f343, 'D')].