2017-05-27 2 views
0

Die Struktur der Tatsachen istWie man ein bestimmtes Element Tatsache Zugriff in einer Liste in Prolog

%structure 
student(ID,FirstName,LastName,[courseList]). 
course(CourseCode,CourseTtile,Credits,Level). 

Nach der Tatsache.

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)]). 

Ich möchte eine Regel schreiben, die die Kredite Stunden aus der Liste summiert

sum([],0). 
sum(H|T,S):- 
sum(T,S1), 
S is H + S1. 


sumCr(Id, Cr):- 
    student(Id,_,_,Courselist), 
    sum(Courselist,Cr).  

Die obige Regel fasst alle Elemente des Sachverhalts in der Liste, aber ich möchte nur den Cr-Wert summieren aller Fakten in der Liste. Also, wenn ich die folgende Abfrage ausführen, sollte die Ausgabe sein.

?. sumCr(20135639, Cr). 
    Cr=12.  
+0

'sum' der nichts summieren; es ergibt "0" für eine leere Liste und eine nicht gebundene Variable für eine längere Liste. –

+0

Ich habe den Fehler korrigiert @ScottHunter – Far

+1

'sum (H | T, S)' hat Syntaxprobleme. Außerdem soll Ihre 'sum/2' eine Liste von ganzen Zahlen summieren, aber Sie übergeben eine Liste von Kursnamen (oder etwas, das nicht klar ist). – lurker

Antwort

0

Sie müssen nur den Teil jedes course Sie summieren möchten extrahieren:

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

Das ist, was ich gesucht habe. Vielen Dank. – Far

Verwandte Themen