List 如何在prolog中访问列表中的特定事实元素
事实的结构是List 如何在prolog中访问列表中的特定事实元素,list,prolog,fact,List,Prolog,Fact,事实的结构是 %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','INFORMA
%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 ).
sum( [course(_,_,N,_)|T], Sum ) :-
sum( T, NT ),
Sum is NT + N.
sum
不求和;它为空列表生成0
,为更长的列表生成未绑定变量。我已经纠正了@ScottHuntersum(H | T,S)
有语法问题的错误。另外,你的sum/2
是用来对一系列整数求和的,但是你给它传递的是一系列课程名称(或者什么,不清楚)。这就是我要找的。非常感谢。