Просматривая списки Пролог - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь работать в Прологе, и мне трудно понять, как решить мою проблему.То, что я пытаюсь сделать, это создать кортежи из 3 элементов каждый из другого списка.Мне нужно сделать кортеж из трех для каждой возможной комбинации из трех списков.Мой план состоит в том, чтобы взять первый элемент в двух списках и затем пройти каждый элемент в третьем списке, создавая кортеж для каждого.Затем возьмите первый элемент в первом списке и второй элемент во втором списке и снова пройдитесь по каждому элементу в третьем списке.Я понимаю, что это может быть трудно следовать.Моя общая цель - создать набор кортежей для каждой возможной комбинации из трех списков.Первый элемент в кортеже - из первого списка, второй элемент - из второго списка, а третий элемент - из третьего списка.

Я новичок в прологе, поэтому я немного запутался в том, в каком направлении мне нужно двигаться и как писать свои мысли в коде.Так что любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 13 октября 2018

Можете ли вы решить эту проблему для двух списков?Если это так, то вы способны решить эту проблему для любого их числа:

pairup_lists( [A, B | T] ,    X ):-
   pairup_lists( [B | T] , Y),
   pairup_two_lists( A,    Y, X).

Вам необходимо добавить здесь несколько угловых случаев,и реализовать предикат pairup_two_lists/3.

Зная заранее, что их будет только три, вы можете встроить рекурсию и объединить все в один предикат, pairup_three_lists/4.

Как, тогда, чтобы решить проблему pairup_two_lists/3?

Если первый список является одноэлементным списком, разве проблема не станет эквивалентной другой, более простой, pair_up_an_element_and_a_list/3 проблеме?

И еслив первом списке больше элементов, так что его можно разбить на голову и хвост, разве та же логика не применима к работе со списком хвостов, элемент за элементом, пока не останется больше элементов для работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...