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
,为更长的列表生成未绑定变量。我已经纠正了@ScottHunter
sum(H | T,S)
有语法问题的错误。另外,你的
sum/2
是用来对一系列整数求和的,但是你给它传递的是一系列课程名称(或者什么,不清楚)。这就是我要找的。非常感谢。