我正在尝试在prolog中实现一个谓词,其中给定任何带有数据的示例表,表in +I,+J的内容应该打印在终端上。在本例中,以下是谓词的原型:get_table_values_cell([+I,+J],+Table,-ContentsL)
示例输出:
?- table(sample_table4,Data),get_table_values_cell([3,2],Data,CL).
Data = [[["11"], ["21"], ["31"], ["41"]], [["12"], ["22"], ["32"]],
[["13"], ["23"]], [["14"]]],
CL = ["32"].
提前感谢!
发布于 2018-02-27 16:05:39
使用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
的情况下解决这个问题,您可以这样编写您自己的"find“(这里称为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"]
顺便说一句,我建议你使用内置谓词。
https://stackoverflow.com/questions/49010069
复制