Prolog:列表中的模式匹配

时间:2015-03-06 06:12:54

标签: prolog dcg

定义关系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]).

有人可以帮我解决这个问题吗?

2 个答案:

答案 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).