2017-11-02 10 views
1

でリストを含むリストのリスト内の要素を交換してくださいそれはほとんどそれです問題が、私はそれの内側にもう一つのリストを持っている:が...</p> <p>を私はいくつかの検索を行って、私はstackoverflowのいくつかの質問で見たことを追加し、私は私の問題を解決することはできません多くのを試してみましたプロローグ

Replacing elements in list of lists PROLOG

マイマトリックス:

[ 
    [[-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]] 
] 

数値を含む1つのリストを新しいリストに置き換える方法と、置き換えられた値を持つすべての行列を返す方法が必要です。 replaceメソッドは、行番号と列(位置)番号とその位置の新しい値を受け取ります。

これを行うにはどうすればいいですか?

EDIT:

内部リストは1-5の要素が含まれています。入力はMatrix、Row、Cell、NewValueです。そして、主な目標は、newValueを持つ新しいMatrixをCell of the Rowに戻すことです。

例:[1,2,3]:

私は私の値に行Nº1及び細胞Nº4を設定します。

だから出力行列は次のようになります

[ 
    [[-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]] 
] 

だから方法は、リストを置き換え[4]リスト[1,2,3]を有します。

+0

私は、最初の記事を編集しました。例を掲載して申し訳ありません。 – BackSpace

+1

リストの要素が何であるかは関係ありません。それは原子、リスト、複合語であってもよい。要素は要素です。これはあなたがリンクしたものとまったく同じです。試したコードを表示してください。それはそのまま働いたはずです。 –

答えて

2

SWI-Prologのは助けることができるbuiltinがあります

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). 

利回り

?- 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

ありがとう!ニースとシンプルなアプローチ:) – BackSpace

関連する問題

 関連する問題