如何获取矩阵的许多元素的值(列表列表)

时间:2016-06-06 03:16:18

标签: matrix prolog

我有问题,因为我想获得矩阵

的许多网格的值

示例:

我有这个矩阵(列表清单)

      [[g,z,n,d,o,g,r,o,y,c],     
       [a,u,u,d,p,o,x,s,t,b],
       [u,y,z,r,r,e,m,e,e,o],
       [g,v,j,m,x,e,j,e,h,l],       
       [e,r,u,y,d,z,k,b,r,x],
       [e,d,h,n,c,y,q,e,x,i],
       [w,f,m,w,x,n,n,m,h,i],
       [y,d,g,u,q,d,z,o,n,d],
       [g,p,o,u,c,o,n,f,x,q],          
       [c,y,z,r,i,c,a,t,x,v]]

我希望得到“#34; dog"从这个矩阵,这个词在坐标(0 3)(0 4)(0 5)。

现在问题是如何在prolog中做到这一点?

到目前为止我的代码:

selectElementList(0,[H|_],H).
selectElementList(P,[H|T],E):-
    length([H|T],Len),
    (  P < Len
    -> P1 is P - 1,
       selectElementList(P1,T,E),
       !
    ;  E = false,
       !
    ).

使用这个谓词,我得到一个矩阵值。

selectGridMatrix(Matrix,X,Y,R):-
    selectElementList(X,Matrix,Row), selectElementList(Y,Row,R).

示例:

?- selectGridMatrix([[0,1,2],[3,4,5]],0,0,R).
R = 0 ;

1 个答案:

答案 0 :(得分:0)

一个例子,使用内置的nth0 / 3和库(yall):

?- M= [[g,z,n,d,o,g,r,o,y,c],     
       [a,u,u,d,p,o,x,s,t,b],
       [u,y,z,r,r,e,m,e,e,o],
       [g,v,j,m,x,e,j,e,h,l],       
       [e,r,u,y,d,z,k,b,r,x],
       [e,d,h,n,c,y,q,e,x,i],
       [w,f,m,w,x,n,n,m,h,i],
       [y,d,g,u,q,d,z,o,n,d],
       [g,p,o,u,c,o,n,f,x,q],          
       [c,y,z,r,i,c,a,t,x,v]], maplist({M}/[(R,C),V]>>(nth0(R,M,Row),nth0(C,Row,V)),[(0,3),(0,4),(0,5)],Word).
M = [[g, z, n, d, o, g, r, o|...], [a, u, u, d, p, o, x|...], [u, y, z, r, r, e|...], [g, v, j, m, x|...], [e, r, u, y|...], [e, d, h|...], [w, f|...], [y|...], [...|...]|...],
Word = [d, o, g].

HTH