定义关系xyz(X),如果X是xyz序列,则该关系为真。 xyz序列是由数字0或数字1以及其他两个xyz序列组成的序列。
一些xyz序列:
xyz([0]).
xyz([1,0,1,0,0]).
并且,以下不被认为是xyz序列:
xyz([1,1,0,0]).
xyz([0,1,0]).
xyz([1,1,0]).
xyz([1,0,1,1,1,1,1,0,1]).
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
最简单的是写一个DCG。有关详细介绍,请参阅this tutorial。您可以逐字记下问题陈述以获得解决方案:
xyz --> [0].
xyz --> [1], xyz, xyz.
您需要phrase
:
?- phrase(xyz, [1,0,1,0,0]).
这个解决方案留下了一个选择点。
答案 1 :(得分:0)
这种简单的语法非常适合理解为DCG提供动力的机制(虽然简化):
seq(S) :- seq(S, []).
seq([0|R], R).
seq([1|T], R) :- seq(T, Q), seq(Q, R).