Deutsch English Français Italiano |
<v8ckap$j8t4$1@solani.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!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 08:07:22 +0200 Message-ID: <v8ckap$j8t4$1@solani.org> References: <v8bc1u$indc$1@solani.org> <v8bc91$inkj$1@solani.org> <v8bccd$inkj$2@solani.org> <v8cjk1$j8js$1@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 06:07:21 -0000 (UTC) Injection-Info: solani.org; logging-data="631716"; 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:RDqV0JZTUq/Njqd5NoL+eadySC4= X-User-ID: eJwVyskBwCAIBMCWOBcsR0T6L8HkPeMKxgmDw3x8+t4uREa7ThnTWmkadwv1p6ackJ5ROlJO+NsRg5AWce8HWlgVVg== In-Reply-To: <v8cjk1$j8js$1@solani.org> Bytes: 2929 Lines: 76 I think its worth adopting this behaviour: /* Scryer Prolog */ ?- a-->b. error(existence_error(procedure,(-->)/2),(-->)/2). ?- assertz((a-->b)). error(permission_error(modify,static_procedure,(-->)/2),assertz/1). ?- a-->b. error(existence_error(procedure,(-->)/2),(-->)/2). Mild Shock schrieb: > 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' >>> >> >