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

Razetime rraghu.11502 at gmail.com
Mon Oct 17 05:44:04 AEDT 2022


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]).


More information about the users mailing list