Skip to content

Instantly share code, notes, and snippets.

@esad
Created June 18, 2019 11:53
Show Gist options
  • Save esad/e0a54cd4bcf2a2090e72401e2cdac878 to your computer and use it in GitHub Desktop.
Save esad/e0a54cd4bcf2a2090e72401e2cdac878 to your computer and use it in GitHub Desktop.
Reversible dcg rules
:- op(1200, xfx, <-->).
:- use_module(library(dcg/basics), [digit//1]).
conj_rev(Term, Term) :- \+ Term = (_, _).
conj_rev((Term1,Term2), (Term2, T)) :- conj_rev(Term1, T).
term_expansion(<-->(X, Y), T) :- conj_rev(Y, YRev), dcg_translate_rule(X --> YRev, T).
term_expansion(<-->(X, Y), T) :- dcg_translate_rule(X --> Y, T).
year(Y) <--> digit(D0), digit(D1), digit(D2), digit(D3), { number_codes(Y, [D0,D1,D2,D3]) }.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment