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'
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'
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'
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'
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 491 |
Nodes: | 16 (2 / 14) |
Uptime: | 147:07:28 |
Calls: | 9,694 |
Calls today: | 4 |
Files: | 13,732 |
Messages: | 6,178,671 |