如何访问序言列表中的特定事实元素
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.
事实的结构是
%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.