s --> a. s --> ['('], t, [ ')']. t --> []. t --> s, t. a --> [0] | [1]. for(M, M, N) :- M =< N. for(I, M, N) :- M < N, M1 is M+1, for(I, M1, N). test1 :- phrase(s, ['(', 0, '(', 1, ')', ')']).