Ich habe eine Liste L
gegeben und meine Aufgabe ist es, kumulative Duplikate zu erstellen, je nachdem, wie viele ich will.Prolog - kumulative Duplikate in einer Liste erstellen?
ich die Liste [a,b,c,d]
zum Beispiel habe und will das erste Element 4 mal dupliziert werden (optional), dann hat jedes nachfolgendes Element wie die vorherigen + 1.
Lassen Sie sich mein Prädikat übernimmt dupliziert werden aufgerufen list_copy(L,N,R)
, das Ergebnis mit L = [a,b,c,d]
und K = 2
sollte sein:
?- list_copy([a,b,c,d],2,R).
R = [a,a,b,b,b,c,c,c,c,d,d,d,d,d]
ich habe es geschafft, zum Duplizieren einer Liste zweimal einen universellen Code zu erstellen:
dupl([],[]).
dupl([O|U],[O,O|U1]) :- dupl(U,U1).
Je nachdem, wie viele O
's ich in meine zweite Zeile stecke, bekomme ich so viele Duplikate.
Meine Frage ist jedoch: Wie kann ich eine dritte Variable als kumulativen Zähler implementieren, um das gewünschte Ergebnis zu erhalten?
So viel wie ich Ihnen die Antwort geben möchte: in Betracht ziehen, ein Prädikat n_of (N, Element, Liste) hinzufügen, die Ihnen eine Liste von N mal geben würde Element wie folgt: '? - n_of (2, a, L). " ' L = [a, a] ' –
@SpinyNorman Es wäre noch besser, wenn' n_of' 4 Argumente anstelle von 3 für eine Differenzliste hätte. Ansonsten ist 'n_of/3' so einfach wie' length (L, N), maplist (= (Element), L) '. –