Grundsätzlich möchte ich die ersten N
Zahlen aus einer Liste entfernen, die Funktion, die überprüft, ob eine Zahl ist prime oder nicht scheint gut zu funktionieren, aber das Programm selbst nichtLöschen ersten N Primzahlen aus einer Liste (Prolog)
Zum Beispiel für den Eingang [2,4,5,7,6,9,11]
und N = 3
sollte ich [4, 6, 9, 11]
bekommen, aber ich bekomme nur [4, 6, 9]
.
divisible(X,Y) :-
0 is X mod Y, !.
divisible(X,Y) :-
X > Y+1,
divisible(X, Y+1).
%isPrime function check whether or not the argument is a prime number
isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).
%delFunction (input_list, N, output_list)
delFunction([],_,_).
delFunction(_,0,_).
delFunction([H|T], N, [H|Res]):-
not(isPrime(H)), !,
delFunction(T, N, Res).
delFunction([_|T], N, Res):-
N1 is N-1,
delFunction(T,N1,Res).
delFunction([2,4,5,7,6,9,11],3,X)
->[4,6,9]
(was nicht die richtige Antwort)
Ehrlich gesagt, ich weiß nicht, wo ich schief gelaufen ist, scheint die Umsetzung Idee ist ziemlich einfach und geradlinig, so ist der Code.
Auch, wenn ich es starte es stoppt bei 10 und ich muss weiter klicken, um mich bis zum Ende der Ausführung (also das Ergebnis) zu bekommen. Irgendeine Idee, wie man es repariert? Ich denke, vielleicht brauche ich ein paar Schnitte, bin mir aber nicht sicher, wo.
PS: Ich möchte lieber nicht über integrierte Funktionen verwenden (wenn es welche gibt, die in diesem Szenario würde helfen)
Ja, nun, das sind meine Probleme. Die fertige Ausgabe ist nicht richtig und es gibt mir mehrere Antworten (wenn es nur einen geben soll, natürlich). Denken Sie immer noch, es ist ein Missbrauch von! irgendwo ... – Hansewl