使用prolog中的列表获取单元格的值

时间:2018-02-27 13:39:54

标签: prolog

我正在尝试在prolog中实现谓词,在给定任何带有数据的样本表的情况下,表索引的内容[+ I,+ J]应该打印在终端上。在这种情况下, 这是谓词的原型: %.2f 样本输出:

get_table_values_cell([+I,+J],+Table,-ContentsL)

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题可以通过nth0/3nth1/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/3nth1/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我建议你使用内置的谓词。