Получить значения из переменной, содержащей список - PullRequest
0 голосов
/ 09 мая 2018

Итак, я довольно новичок в Прологе, я решаю головоломки, и у меня есть предикат с этой подписью:

nao_altera_linhas_anteriores(Posicoes, L, Ja_Preenchidas):-

где Posicoes - это список строк и столбцов, например:

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

и я не знаю, как получить доступ к каждому элементу списка, используя имя Posicoes, я также хочу получить доступ к каждой строке, так что в этом примере я хочу получить доступ к 1, 2 и 4, у кого-нибудь есть идея? Я только начинающий, и мне трудно понять, как использовать этот язык по сравнению с C или Java.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вот решение с 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.
0 голосов
/ 09 мая 2018

Вы "получаете доступ" к каждому из элементов списка с объединением .

Когда ваш предикат определен как:

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

с учетом цели pred(Z), он должен объединить Z с [H|T], поэтому он будет успешным, если Z является списком, H является первым элементом этого списка, а T будучи списком, содержащим другие элементы.

Вы можете создавать более сложные термины для объединения в заголовке своего правила:

pred([(X,Y)|T], [X|S]) :- pred(T, S).
pred([], []).

Это извлечет координату X из первого списка:

?- pred([(1,2), (2,3), (4,4)], L).
L = [1, 2, 4].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...