问题
Define a relation xyz(X) that is true if X is a xyz sequence. A xyz sequence is a sequence that consists of either the number 0, or the number 1 followed by two other xyz sequences.
Some xyz sequences:
xyz([0]).
xyz([1,0,1,0,0]).
And, the following are not considered xyz sequences:
xyz([1,1,0,0]).
xyz([0,1,0]).
xyz([1,1,0]).
xyz([1,0,1,1,1,1,1,0,1]).
Can someone help me with how to approach this problem?
回答1:
The easiest is to write a DCG. See this tutorial for a thorough introduction. You can literally write down the problem statement verbatim to get a solution:
xyz --> [0].
xyz --> [1], xyz, xyz.
You will need phrase
:
?- phrase(xyz, [1,0,1,0,0]).
This solution leaves behind a choice point.
回答2:
such simple grammar is ideal to understand the mechanism (albeit simplified) that powers DCGs:
seq(S) :- seq(S, []).
seq([0|R], R).
seq([1|T], R) :- seq(T, Q), seq(Q, R).
来源:https://stackoverflow.com/questions/28893265/prolog-pattern-matching-within-a-list