Re: [m-users.] Problem with DCG producing false negative
Mark Brown <[email protected]>
| Newsgroups | gmane.comp.lang.mercury.general |
|---|---|
| Message-ID | <CAM4AczC0uRhmPXy220t+zoV4G9E5Sr4X6SGPXTAioafo_1YQ0w@mail.gmail.com> |
On Mon, Oct 17, 2022 at 5:44 AM Razetime <[email protected]> wrote: > > 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? I can see one clause that is most likely incorrect, but it depends on your intended meaning for tls/4. Perhaps you can state the intended meaning, that is, the relationship you want to hold between the four arguments of tls? (The other predicates are clear enough.) Then we may be able to explain the unexpected result. Mark > > :- 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 _______________________________________________ users mailing list [email protected] https://lists.mercurylang.org/listinfo/users