I'm trying to learn more about DCGs in Prolog and while reading through different sources, I noticed that in some cases phrase wasn't being used ?
From the Learn Prolog Now website, it presents this example:
s   -->  np,vp. 
np  -->  det,n. 
vp  -->  v,np. 
vp  -->  v. 
det -->  [the]. 
det -->  [a]. 
n   -->  [woman]. 
n   -->  [man]. 
v   -->  [shoots].
They then use the query s(X,[]) to generate all the sentences in the grammar.
I tried phrase(s,L) and it also generates all the sentences described by the grammar. 
What's the difference in using s(X,[]) and phrase(s,L)? When should phrase be used? 
Actually, SWI-Prolog performs type checking (arguments must proper lists), then exhibits a performance penalty when using phrase/3.
Also, to allow for using a DCG and perform 'state threading', that is handing off to hidden parameters the state propagation, a call_dcg/3 has been introduced.
But for normal usage - lexical parsing and generation - phrase is the way to go.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With