Deutsch English Français Italiano |
<v8cjk1$j8js$1@solani.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!npeer.as286.net!npeer-ng0.as286.net!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock <janburse@fastmail.fm> Newsgroups: comp.lang.prolog Subject: Re: DCG restrictions on the left-hand side [Novacore] Date: Wed, 31 Jul 2024 07:55:14 +0200 Message-ID: <v8cjk1$j8js$1@solani.org> References: <v8bc1u$indc$1@solani.org> <v8bc91$inkj$1@solani.org> <v8bccd$inkj$2@solani.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 31 Jul 2024 05:55:14 -0000 (UTC) Injection-Info: solani.org; logging-data="631420"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.18.2 Cancel-Lock: sha1:Va7CtudKPIikaTFyaZ2WGD2NzsY= X-User-ID: eJwNyNsBADEEBMCWCMspx+P0X0IynwMxtnY1mGKxclb/mUqJojft8IgVmuMrmVhGdti7UcmaItZY6i+PFfsFaRIV9g== In-Reply-To: <v8bccd$inkj$2@solani.org> Bytes: 2535 Lines: 64 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' >> >