3 последовательных элемента в Прологе с использованием concat

Поэтому я работаю над этой проблемой, чтобы иметь 3 элемента X, которые должны быть последовательными в списке и использовать только concat.

Вот что я пытался:

threeConsecutive(X, L):- concat(X, X, L2), concat(L2, X, L).

Это правильно? Если нет, не могли бы вы объяснить, что я делаю не так? Насколько я вижу, я объединяю 2 элемента X и помещаю их в другую свободную переменную с именем L2, а затем снова объединяю это с элементом X. Наконец, я сохраняю это в исходном списке L.

Буду очень признателен, если кто-нибудь сможет это проверить, поскольку я действительно пытаюсь понять концепцию concat в Prolog.

Спасибо!

2 ответа

Решение

Это правильно?

нет, первая проблема в том, что append/3 (для обсуждения, скажем, неопределенный concat/3 - это append/3) устанавливает связь между 3 списками. Так

объединение двух элементов X и помещение их в другую свободную переменную с именем L2

должно быть

concat([X], [X], L2)

Это можно было бы лучше выразить объединением, так как

[X,X] = L2

Та же проблема применяется в

..., concat(L2, X, L).

должен быть конкат (L2, X, L).

..., concat(L2, [X], L).

и тогда вы можете увидеть, что весь код будет уменьшен до

threeConsecutive(X, [X,X,X]).

Итак, вторая проблема очевидна, но, поскольку ответ @Boris уже показал требуемый шаблон, я не буду повторять его здесь.

Все, что вам нужно сделать, это использовать сопоставление с шаблоном:

?- append(_, [X,Y,Z|_], [a,b,c,d,e,f]).
X = a, Y = b, Z = c ;
X = b, Y = c, Z = d ;
X = c, Y = d, Z = e ;
X = d, Y = e, Z = f ;
false.

append/3 делает возврат для вас.

Если вы хотите иметь три элемента в своем собственном списке, вы можете использовать два вызова append/3:

append(_, Suffix, List), append([X,Y,Z], _, Suffix)

Как сделать список из трех элементов: просто скажите List = [X,Y,Z], Чтобы составить список любой длины, вы могли бы даже использовать length(List, Len)так например length(List, 3),

И, если вам нужно, чтобы три переменные были одинаковыми (например, объедините их), просто используйте одну и ту же переменную: List = [X, X, X],

Другие вопросы по тегам