2016-11-08 5 views
0

Nehmen wir an, ich möchte eine Liste mit 10 Elementen erstellen, wobei jedes Element 0 oder 1 oder 2 sein kann. Was ich habe, sind zwei Listen List1 und List2, sie sind die Positionen dieser 1 und 2. Wie kann ich also die ganze Liste eine Funktion wie folgt verwendet:Wie erstellt man eine Liste in Prolog?

construct(List1,List2,L). 

Beispiel:

Input:

construct([1,3,5],[8],L) 

Output:

L = [1,0,1,0,1,0,0,2,0,0] 
+0

Eigentlich implementiere ich bereits eine Funktion replace (L, pos, num, Lnew), um das pos-te Element in L durch num zu ersetzen und lege die neue Liste in Lnew, aber ich weiß einfach nicht wie ich diese Funktion benutzen soll um die Konstruktfunktion zu implementieren. – Jasmine233

+0

Sie müssen wirklich in Ihrer Frage alles relevante zeigen, das Sie haben. –

Antwort

0

Was

constructH(Top, Top, _, _, []). 

constructH(Num, Top, L1, L2, [1 | Ho]) :- 
    Num < Top, 
    member(Num, L1), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 

constructH(Num, Top, L1, L2, [2 | Ho]) :- 
    Num < Top, 
    member(Num, L2), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 

constructH(Num, Top, L1, L2, [0 | Ho]) :- 
    Num < Top, 
    \+ member(Num, L1), 
    \+ member(Num, L2), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 


construct(List1, List2, Lout) :- 
    constructH(1, 11, List1, List2, Lout). 

?

+0

Die Antworten sehen für die allgemeinste Abfrage seltsam aus: '? - Konstruieren (As, Bs, Os) .' – mat

Verwandte Themen