我对prolog中的列表有一些问题。这是我的代码......
add(X,List,[X|List]).
append([],X,X).
append([X|Y],Z,[X|W]) :- append(Y,Z,W).
d([H1|T1],[H2|T2]) :-
( H1 > 0
-> ( H2 > 0
-> write(H1), write(H2), H4 is H1 - 1,
H5 is H2 - 1,
H5 > 0
-> length(Visited, Y),
( Y > 0
-> add(H5, Visited, Visited)
; add(H5, [], Visited)
),
add(H4, T1, X1),
d(X1, T2)
; add(H4, T1, Z1),
d(Z1,T2)
; d([H1|T1],T2)
)
; append(Visited, [H2|T2], NewList),
d(T1,NewList)
).
输入为:d([3,0,2,2,0,4,1],[1,1,3,3,1,1,2])
。
这里第一个列表是行,第二个列表是列。我的目标是从行和列打印第一个元素并在列表中移动。这里的条件是当我已经访问过行和列的元素时,我必须用'1'减去该元素。例如,在上面输入行的第一个元素是'3'并且列的第一个元素是'1'所以当我从行和列中选择元素然后我减去'1'。因此,最终值将是[2,0,2,2,0,4,1]和[0,1,3,3,1,1,2]。就像我明智的想要去旅行清单一样。当我们得到列'0'时,我也应该转移到同一行的下一列。
这里我正在做,使列修复直到它变为'0'并逐行迭代行并将行的新值存储在另一个列表中但是当我运行代码时它不打印任何东西。任何帮助将不胜感激。感谢