从包含列表的变量中获取值

时间:2018-05-08 21:51:58

标签: prolog

所以我在Prolog很新,我正在制作一个拼图解算器,我有一个带有这个签名的谓词:

nao_altera_linhas_anteriores(Posicoes, L, Ja_Preenchidas):-

其中Posicoes是行和列的列表,如下所示:

 [(1,2), (2,3), (4,4)])

并且我不知道如何使用名称Posicoes访问列表中的每个元素,我也想访问每一行,所以在这个例子中我想要访问1,2和4,有没有人有想法?我只是一个乞丐,与C或Java相比,我在掌握如何使用这种语言时遇到了麻烦。

2 个答案:

答案 0 :(得分:1)

您"访问"每个list元素都带有unification

当您的谓词定义为:

pred([H|T]) :- ...

如果目标为pred(Z),则必须将Z[H|T]统一,因此如果Z是一个列表,HT,则会成功该列表的第一个元素,pred([(X,Y)|T], [X|S]) :- pred(T, S). pred([], []). 是包含其他元素的列表。

您可以构建更复杂的术语,以统一规则:

?- pred([(1,2), (2,3), (4,4)], L).
L = [1, 2, 4].

这将从第一个列表中提取X坐标:

input()

答案 1 :(得分:0)

以下是SWI-Prolog的解决方案:

?- Posicoes = [(1,2), (2,3), (4,4)], nth1(3, Posicoes, (Line, _)).
Posicoes = [(1, 2),  (2, 3),  (4, 4)],
Line = 4.

您可以使用它来搜索所有行:

?- nth1(Position, $Posicoes, (Line, _)).
Position = Line, Line = 1,
Position = Line, Line = 2,
Position = 3, Line = 4.