Si supponga che ho due liste arbitrarie che rappresentano le prime due voci di un 3-posto predicato:Prolog Principiante: Lista Reverse solo una volta
[anna,berta,charlotte],[charles,bob,andy]
voglio abbinare ogni elemento in un terzo elenco (la terza voce di 3-posto predicato) come segue:
[[anna,andy],[berta,bob],[charlotte,charles]]
Fondamentalmente gli articoli vengono abbinati in modo sequenziale inverso. Per abbinare gli elementi in modo sequenziale, ho ideato il seguente codice:
match([],[],[]).
match([A|At],[C|Ct],[[A,C]|Dt]):-match(At,Ct,Dt).
Ma questo mi avrebbe dato la seguente:
match([anna,berta,charlotte],[charles,bob,andy],X).
X=[[anna,charles],[berta,bob],[charlotte,andy]]
Così ho bisogno di invertire il secondo elenco in qualche modo. Finora, ho modificato il codice come segue:
match([],[],[]).
match([A|At],[C|Ct],[[A,B]|Dt]):-reverse([C|Ct],[B|Bt]),match(At,Bt,Dt).
Ma questo sarebbe continuamente invertire la seconda lista ad ogni passaggio. Il risultato sarebbe il seguente aspetto:
match([anna,berta,charlotte],[charles,bob,andy],X).
X=[[anna,andy],[berta,charles],[charlotte,bob]]
Domanda: Come faccio a invertire la seconda lista solo una volta, in modo che i risultati effettivi corrispondono a quelli desiderati? O il mio approccio è fondamentalmente imperfetto? Sono nuovo di prologo e sono attualmente ostacolato da questo. Qualsiasi aiuto sarebbe apprezzato.
s (X) per l'utilizzo di un pulire la rappresentazione dei dati. – repeat