Sujet : Re: DCG restrictions on the left-hand side [Novacore]
De : janburse (at) *nospam* fastmail.fm (Mild Shock)
Groupes : comp.lang.prologDate : 31. Jul 2024, 07:55:14
Autres entêtes
Message-ID : <v8cjk1$j8js$1@solani.org>
References : 1 2 3
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.18.2
Although SWI-Prolog implements a lot of checks.
It still allows this one:
?- a-->b.
ERROR: Unknown procedure: (-->)/2
?- assertz((a-->b)).
true.
?- a-->b.
true.
Scryer Prolog managed to prevent this, in that
the assertz/1 throws an error.
Think will finally adopt this behaviour to
prevent the end-user from accidentially
fiddling with (-->)/2.
Mild Shock schrieb:
This was discussed here:
Definite Clause Grammars Harmonization Proposal
Last edit jschimpf? October 20, 2016, at 12:42 AM
https://eclipseclp.org/wiki/Prolog/DCG
Not sure why Scryer Prolog doesn't implement it.
Mild Shock schrieb:
>
In Novacore we are lucky, its a side effect of
phrase translating the head and a multi-file check:
>
?- [user].
p;q --> r.
Fehler: Kann Prädikat ;/2 nicht umdefinieren, nicht als Mehrdateien markiert.
>
But might work out differently if a DCG is expanded
and asserted. Ok, its actually not so bad:
>
?- expand_term((p;q --> r), X), assertz(X).
Fehler: Kann Prädikat ;/2 nicht aktualisieren.
user auf 1
>
>
Mild Shock schrieb:
Guess how many newer Prolog systems allow this here:
>
?- [user].
p;q --> r.
true.
>
On the other hand SWI-Prolog disallows it:
>
?- [user].
p;q --> r.
>
ERROR: user://1:29:
ERROR: No permission to define dcg_nonterminal `p;q'
>