2017-11-02 2 views
1

Ich habe einige Suche gemacht und versucht, viele anfügt, dass ich in einigen Fragen von Stackoverflow gesehen, aber ich kann mein Problem nicht lösen ...Element in der Liste der Liste, die Liste in Prolog enthält

Es ist fast, dass Problem, aber ich habe noch eine Liste drin:

Replacing elements in list of lists PROLOG

My Matrix:

[ 
    [[-1], [-1], [-1], [4], [-1], [-1], [-1]], 
    [[-1], [0], [1], [0], [2], [-1]], 
    [[3], [4], [3], [1], [1], [2], [3]], 
    [[1], [5], [4], [2], [4], [3]], 
    [[2], [3], [4], [0], [4], [4], [1]], 
    [[2], [3], [1], [3], [0], [4]], 
    [[0], [1], [0], [3], [2], [1], [0]], 
    [[-1], [2], [2], [5], [0], [-1]], 
    [[-1], [-1], [-1], [4], [-1], [-1], [-1]] 
] 

Ich brauche eine Methode, um eine Liste, die Zahlen enthält, durch eine neue Liste zu ersetzen und die gesamte Matrix mit dem ersetzten Wert zurückzugeben. Die Methode replace empfängt die Zeilennummer und die Spaltennummer (Position) und den neuen Wert für die Position.

Hat jemand eine Idee wie kann man das machen?

EDIT:

Die internen Listen enthalten 1-5 Elemente. Die Eingaben sind: Matrix, Zeile, Zelle, NewValue. Und das Hauptziel ist, eine neue Matrix mit dem newValue auf der Zelle der Reihe zurückzugeben.

Beispiel:

Ich möchte meine Reihe nº1 und Zelle nº 4 auf den Wert setzen: [1,2,3].

So wird die Ausgangsmatrix sein:

[ 
    [[-1], [-1], [-1], [1,2,3], [-1], [-1], [-1]], 
    [[-1], [0], [1], [0], [2], [-1]], 
    [[3], [4], [3], [1], [1], [2], [3]], 
    [[1], [5], [4], [2], [4], [3]], 
    [[2], [3], [4], [0], [4], [4], [1]], 
    [[2], [3], [1], [3], [0], [4]], 
    [[0], [1], [0], [3], [2], [1], [0]], 
    [[-1], [2], [2], [5], [0], [-1]], 
    [[-1], [-1], [-1], [4], [-1], [-1], [-1]] 
] 

So ersetzt die Methode, um die Liste [4] mit der Liste [1,2,3].

+0

ich den ersten Beitrag bearbeitet. Es tut mir leid, dass kein Beispiel gepostet wurde – BackSpace

+1

Es spielt keine Rolle, was das Element der Liste ist. Es kann ein Atom, eine Liste, ein zusammengesetzter Term sein. Ein Element ist ein Element. Das ist also genau das Duplikat von dem, das du verlinkt hast. Zeige uns den Code, den du ausprobiert hast. es hätte funktionieren sollen wie es ist. –

Antwort

2

SWI-Prolog hat eine builtin, die helfen könnten:

test :- I=[ [[-1], [-1], [-1], [4], [-1], [-1], [-1]], 
     [[-1], [0], [1], [0], [2], [-1]], 
     [[3], [4], [3], [1], [1], [2], [3]], 
     [[1], [5], [4], [2], [4], [3]], 
     [[2], [3], [4], [0], [4], [4], [1]], 
     [[2], [3], [1], [3], [0], [4]], 
     [[0], [1], [0], [3], [2], [1], [0]], 
     [[-1], [2], [2], [5], [0], [-1]], 
     [[-1], [-1], [-1], [4], [-1], [-1], [-1]] 
    ], 
    replace_row_col(I,1,4,[1,2,3],Upd), 
    maplist(writeln,Upd). 

replace_nth(N,I,V,O) :- 
    nth1(N,I,_,T), 
    nth1(N,O,V,T). 

replace_row_col(M,Row,Col,Cell,N) :- 
    nth1(Row,M,Old), 
    replace_nth(Col,Old,Cell,Upd), 
    replace_nth(Row,M,Upd,N). 

ergibt

?- test. 
[[-1],[-1],[-1],[1,2,3],[-1],[-1],[-1]] 
[[-1],[0],[1],[0],[2],[-1]] 
[[3],[4],[3],[1],[1],[2],[3]] 
[[1],[5],[4],[2],[4],[3]] 
[[2],[3],[4],[0],[4],[4],[1]] 
[[2],[3],[1],[3],[0],[4]] 
[[0],[1],[0],[3],[2],[1],[0]] 
[[-1],[2],[2],[5],[0],[-1]] 
[[-1],[-1],[-1],[4],[-1],[-1],[-1]] 
+0

Vielen Dank !! Netter und einfacher Ansatz :) – BackSpace

Verwandte Themen