如何访问序言列表中的特定事实元素

How to access a specific element of fact in a list in prolog

事实的结构是

  %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.      

您只需要提取每个 course 您想要求和的部分:

sum( [], 0 ).
sum( [course(_,_,N,_)|T], Sum ) :-
    sum( T, NT ),
    Sum is NT + N.