2016-04-23 27 views
0

Ich arbeite an einem Dienstplansystemprojekt in Prolog und verwende eine modifizierte Such- und Einfügestruktur basierend auf einem von unserem Professor bereitgestellten Beispiel. Wenn ich jedoch versuche, meine Implementierung davon auszuführen, wird die angegebene Datensatzliste niemals in den Dienstplan eingefügt, selbst wenn keine anderen Elemente vorhanden sind. Ich bin nicht sehr vertraut mit Prolog, und dieses Thema wirft mich für eine Schleife.Einfügen in eine Liste von Listen prolog

My Durchführung des Such-/Insert-Methode ist wie folgt:

search(_, [], 0). 
search([X,_,_], [[X, _, _]|_], 1). 
search([_,Y,_], [[_, Y, _]|_], 1). 
search([X,Y,Z], [[_, _, _]|T], C) :- search([X, Y, Z], T, C). 
searchinsert([X, Y, Z], L, L) :- search([X, Y, Z], L, 1). 
searchinsert([X, Y, Z], L, [[X, _, _] | L]) :- search([X, Y, Z], L, 0). 
searchinsert([X, Y, Z], L, [[_, Y, _] | L]) :- search([X, Y, Z], L, 0). 

Wie ausgelegt, es sollte die bereitgestellte Datensatzliste ablehnen, wenn entweder das erste oder zweite Element, das in dem Dienstplan eines anderen Elements entsprechen. Die Funktion wird wie folgt aufgerufen:

process(4, X) :- 
    nl, 
    write('\tInsert student into roster.'), nl, 
    read_student_info([A, B, C]), 
    nl, nl, searchinsert([A, B, C], X, X). 

Antwort

0

Vielleicht ändern Sie einfach die letzte Nummer:

..., searchinsert([A, B, C], X, 1). 

so X hat eine Chance auf eine Liste instanziiert werden. Aber Sie sollten den "Datenfluss" Ihres Prozess/2-Treibers überdenken, wahrscheinlich fehlt ein Argument.

+0

Welches Argument glauben Sie, dass ich vermisse? Die einzige Information, die ich in den Prozess/2 Fahrer führe, ist der Dienstplan selbst. –

+0

In Prolog sind Variablen 'einmal zuweisen'. Also, vielleicht brauchen Sie eine andere Variable, die an Prozess/2 übergeben wird, die den aktualisierten Dienstplan erhalten soll. – CapelliC

Verwandte Themen