2017-07-09 4 views
1

Ich muss eine Liste in eine aufteilen, die größer als N und eine kleiner ist, während alle Nicht-Ganzzahlen ignoriert werden. Es funktioniert perfekt, außer dass es eine Ausnahme auslöst, wenn ich nicht ganze Zahlen einschließe. sehen kann jemand, was ich falsch mache bitte:Prolog-Programm zum Ausschließen einer ganzen Zahl aus der Ergebnisliste

split([],N, [],[]). 
split([HeadOrig | TailOrig], N, L1, TailOrig):- 
    \+ integer(HeadOrig), 
    split(TailOrig, N, L1, TailOrig). 
split([HeadOrig|TailOrig],N, [HeadOrig|Tail1],L2):- 
    integer(HeadOrig), HeadOrig >= N, 
    !, 
    split(TailOrig, N, Tail1, L2). 
split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :- 
    integer(HeadOrig), HeadOrig < N, 
    !, 
    split(TailOrig, N, L1, Tail2). 
+0

OK sah ich, dass jetzt (haben Original-Code bearbeitet oben) aber es gibt jetzt nur 'falsch' zurück, wenn ich ihm eine Liste mit einem Buchstaben gebe, zB: [1,2, 'a']. Kein Fehler mehr, aber jetzt geht es nicht weiter mit der Teilung – ildsarria

Antwort

1

Das Problem ist, dass das letzte Glied in dieser Klausel sollte nicht TailOrig:

split([], _, [],[]). 

split([HeadOrig | TailOrig], N, L1, L2):- 
    \+ integer(HeadOrig), 
    split(TailOrig, N, L1, L2), 
    !. 

split([HeadOrig|TailOrig], N, [HeadOrig|Tail1], L2):- 
    integer(HeadOrig), HeadOrig >= N, 
    !, 
    split(TailOrig, N, Tail1, L2). 

split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :- 
    integer(HeadOrig), HeadOrig < N, 
    !, 
    split(TailOrig, N, L1, Tail2). 
+0

OMGosh danke! Es viel zu lange anstarrend :) – ildsarria

+0

Gern geschehen :) – enezhadian

Verwandte Themen