我正在尝试在prolog中实现谓词,在给定任何带有数据的样本表的情况下,表索引的内容[+ I,+ J]应该打印在终端上。在这种情况下,
这是谓词的原型:
%.2f
样本输出:
get_table_values_cell([+I,+J],+Table,-ContentsL)
提前致谢!
答案 0 :(得分:1)
问题可以通过nth0/3
或nth1/3
(内置预测)轻松解决,例如以这种方式:
get_table_values_cell([R,C],L):-
Data = [
[["11"], ["21"], ["31"], ["41"]],
[["12"], ["22"], ["32"]],
[["13"], ["23"]],
[["14"]]
],
nth1(R,Data,L1),
nth1(C,L1,L).
?- get_table_values_cell([3,2],CL).
CL = ["23"].
要在不使用nth0/3
或nth1/3
的情况下解决问题,您可以用这种方式编写自己的“查找”(此处称为getElement1/4
)谓词:
getElement1(C,C,[H|_],H):- !. %the cut is not mandatory
getElement1(Current,Max,[_|T],Lout):-
Current < Max,
C is Current+1,
getElement1(C,Max,T,Lout).
然后
getElement([R,C],L):-
Data = [
[["11"], ["21"], ["31"], ["41"]],
[["12"], ["22"], ["32"]],
[["13"], ["23"]],
[["14"]]
],
getElement1(1,R,Data,L1),
getElement1(1,C,L1,L).
?- getElement([3,2],L).
L = ["23"]
BTW我建议你使用内置的谓词。