Структура фактов такова.
%structure
student(ID,FirstName,LastName,[courseList]).
course(CourseCode,CourseTtile,Credits,Level).
Далее факт.
student(20135639,'Mohammed','Abdul Wahab',
[course('ITIS411','DATABASE SYSTEM IMPLEMENTATION',3,hard),
course('ITIS412','INFORMATION SECURITY',3 ,easy),
course('ITIS499','SENIOR PROJECT',3,hard),
course('ITIS469','AI',3,hard)] ).
Я хочу написать правило, которое суммирует часы кредитов из списка
sum([],0).
sum(H|T,S):-
sum(T,S1),
S is H + S1.
sumCr(Id, Cr):-
student(Id,_,_,Courselist),
sum(Courselist,Cr).
Приведенное выше правило суммирует все элементы фактов в списке, но я хочу суммировать только значение Cr всех фактов в списке. Поэтому, когда я запускаю следующий запрос, вывод должен быть.
?. sumCr(20135639, Cr).
Cr=12.
sum
ничего не суммирует; он дает0
для пустого списка и несвязанную переменную для любого более длинного списка. - person Scott Hunter   schedule 27.05.2017sum(H|T,S)
имеет проблемы с синтаксисом. Кроме того, вашsum/2
предназначен для суммирования списка целых чисел, но вы передаете ему список названий курсов (или что-то в этом роде, непонятно). - person lurker   schedule 27.05.2017