如何在没有算术的情况下识别 Prolog 中的 A^n B^n 语言以及对于 A != B 的任何 A、B?
已知 A = a 和 B = b 我们可以写
% For each 'a' save 'b' in a list, then check
% whether constructed list is equal to the rest of input list
anbn(L) :- anbn(L, []).
anbn(L, L).
anbn([a|L],A) :- anbn(L, [b|A]).
对于任何 A 和 BI 都在考虑从
anbn(L) :- anbn(L, []).
anbn([H|L],[]) :- anbn(L,[H]). % save an element
anbn([H|L], [H|A]) :- anbn(L, [H,H|A]). % make sure front elements are the same
所以第一个元素都是相同的,但是我没有看到一种优雅的方法来检查列表其余部分中的所有元素是否与前面的元素相同和不同。
我可以检查其余的是否与存储的列表一样长,然后检查它是否仅包含第二种类型的元素,但我相信我使问题过于复杂,并且存在一个简短而简单的解决方案。