Re: Extended DCG?

Alan Baljeu <[email protected]>
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <[email protected]>
I never bother with phrase/3, and just invoke my predicate xy(Rag, List, []).  So maybe I could do xy(Rag, (List1, List2), ([],[])) and design xy to work?  It's not clear to me how to pull this all together.
 
Alan Baljeu


________________________________
 From: "Abdallah, Samer" <[email protected]>
To: Alan Baljeu <[email protected]> 
Cc: Prolog <[email protected]> 
Sent: Wednesday, February 12, 2014 1:48:07 PM
Subject: Re: [SWIPL] Extended DCG?
 

Hi all,
I would just like to use this opportunity to request again that phrase/3 be 
allowed to work with arbitrary types in the last two positions, not just
lists, or an alternative, say gphrase/3  (for generalised phrase), or
rundcg/3 which works exactly like phrase/3 but allows arbitrary types.
Or even better, put phrase/3 back how it was and introduce a type
checking list_phrase/3 or safe_phrase/3 for people who want that.

It used to be the case that an extended DCG for writing a transducer
as  Alan would like, was easy to write using ordinary DCG notation.
The type of the threaded argument would be a pair of lists (L,R)
instead of just one list. In my DCG library I have some DCG rules for
working with this conveniently. For example, operators (\<)//1 and (\>)//1 
apply a DCG phrase to the left or right member of the pair:

:- op(800, \<, fy).
:- op(800, \>, fy).

\<(P, (L1,R), (L2,R)) :- phrase(P,L1,L2). 
\>(P, (L,R1), (L,R2)) :- phrase(P,R1,R2)

Then you can do things like \< integer(X) to read an integer from
from the left sequence and \> [int(X)] to write a term to the right, and so on.
Alan's scenario is easily and efficiently dealt with.

Forcing us to use lists for the arguments to phrase/3 forces an ugly
encoding of the pair in a singleton list, e.g. as [(L,R)], and, if the list
is [X] and we already have a bunch of predicates that want to work
on X,  forces an unnecessary layer of meta-predicates to get through 
the wrapping.

For the moment, I have deleted the two offending lines from boot/dcg.pl
in my local installations, but of course, this is not good for the portability
of my code!

cheers,
Samer


(

On 11 Feb 2014, at 16:51, Alan Baljeu <[email protected]>
wrote:
> I have a scenario where I'm mapping a list to a second list, but it's not 1 to 1.  For this, it would be nice to use an extended DCG, that supports two independent lists.  Does such a thing exist?
>  
> Alan Baljeu
> -------------- next part --------------
> HTML attachment scrubbed and removed
> _______________________________________________
> SWI-Prolog mailing list
> [email protected]
> https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
> 
-------------- next part --------------
HTML attachment scrubbed and removed
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.