2017-05-27 32 views
0

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

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

'sum'不总结什么;它为空列表产生'0',并为任何更长的列表产生未绑定变量。 –

+0

我纠正了错误@ScottHunter – Far

+1

'sum(H | T,S)'有语法问题。另外,你的'sum/2'是为了总结一个整数列表,但是你传递了一个课程名称列表(或者其他的,不清楚)。 – lurker

回答

0

你只需要提取要总结每个course部分:

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

这就是我一直在寻找的。谢谢。 – Far

相关问题