[m-users.] Problem with DCG producing false negative

Razetime <[email protected]>
Newsgroups gmane.comp.lang.mercury.general
Message-ID <CAMtxHUtQoL-bLKUm=pGMux7JfaGDjsoEadB45y0ryF0ibP41cA@mail.gmail.com>
I have created the following predicate tls to match lines that satisfy
the conditions given in Advent of Code Day 7:
https://adventofcode.com/2016/day/7 (Spoilers)

For some reason during testing ,the DCG fails when given
L="fslvgbiibdkhchajyb[zpbhqrokrbfuqrowop]gqqzoqvfsdfcjcdurrs[xhqfcfytbbekivnvod]jxjwuxivnyhppvfhaol[evfnrmrjnnhychtpv]emiyjcjsnojxexs",
tls(X,Y,to_char_list(L),[])
and I am not sure why it is giving that result. What is done wrong here?

:- pred tls(list(cl)::out,list(cl)::out,cl::in,cl::out) is nondet.
tls([X],[])        --> {alp(X)},seq(X).
tls([X0|X],[Y0|Y]) --> {alp(X0),alp(Y0),\+abba(Y0)},

seq(X0),['['],seq(Y0),[']'],tls(X,Y),{any_true(abba,[X0|X])}.

:- pred seq(list(T),list(T),list(T)).
:- mode seq(out,in,out) is multi.
seq([])     --> [].
seq([E|Es]) --> [E], seq(Es).

:- pred alp(cl::in) is semidet.
alp(L):-all_true(is_alpha,L).

:- pred abba(cl::in) is semidet.
abba([A,B,B,A|L]):-A\=B.
abba([_,A,B,C|L]):-abba([A,B,C|L]).
_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.