1
Рассмотрим:путаются ответ Пролога
bar([], Ws, Ws).
bar([X|Xs], Ys, [X|Zs]) :- bar(Xs, Ys, Zs).
1) Как не это имеет не решения
bar([1,2], [], [X,X]).
2) Как это имеет только одно решение, когда Z = 5?
bar([5,Y], [Y,5], [Z,Z|_]).
3) Как это имеет только одно решение, когда Z = 5 и Y = 5?
bar([_,Y], [5,5], [Z,Z,Z|_]).
ОК, я вижу сейчас. Есть ли у вас какое-либо предложение найти смысл вещей, таких как bar/3? Кажется, у меня проблемы с визуализацией этого шага. –
@WilliamMcCarty Это несколько сложно, и он становится очень сложным, так как число правил повышается. Пройдите каждое правило и выясните, что он делает на высоком уровне, начиная с правил сокращения и возвращаясь к базовому регистру. В 'bar' правило сокращения проверяет, что списки 1 и 3 имеют один и тот же элемент в голове, а затем уменьшают элемент head. Базовый регистр проверяет, что приведенный список 3 совпадает с списком 2. Объединение этих двух шагов в один приводит к наблюдению, что начальная часть списка 3 должна соответствовать списку 1, а хвостовая часть должна соответствовать списку 2. – dasblinkenlight
Очень Теперь просвещение становится намного больше, спасибо большое. –