Deutsch English Français Italiano |
<v98o1s$12aq2$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: Is a PIP for Syntax extensions necessary? (Was; post-N246 Read- and Write-Option variable_names/1) Date: Sun, 11 Aug 2024 00:02:38 +0200 Message-ID: <v98o1s$12aq2$1@solani.org> References: <v8bc1u$indc$1@solani.org> <v98b1p$123qt$1@solani.org> <v98bpp$124d0$1@solani.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Sat, 10 Aug 2024 22:02:36 -0000 (UTC) Injection-Info: solani.org; logging-data="1125186"; 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:R+iLYqyoGwiDq56phM/X+4u/79c= X-User-ID: eJwFwYEBwDAEBMCVQvzTcRD2H6F3uBS2G0HDYqmPxmjPM3PHbSzK5Tx28cuvPLPbovNoil5dwbznukAh7Adb2BW/ In-Reply-To: <v98bpp$124d0$1@solani.org> Bytes: 4456 Lines: 107 I have a question, does SWI-Prolog not anymore use their dict syntax in the Janus interface: > import janus_swi as janus > janus.query_once("Y is X+1", {"X":1}) {'Y': 2, 'truth': True} I don’t see _{...} anymore. When and how did this happen? I was just thinking whether a Syntax extension PIP is necessary. Such a PIP isn’t listed: https://prolog-lang.org/ImplementersForum/PIPs.html Is SWI-Prolog safe, against parsing problems, when it still has block operators in the background? Like can one mix and match code that uses Janus interface with the “new” dicts with other code that uses the SWI-Prolog dicts based on _{...} which we might now term the “old” dicts. How do you access and manipulate the “new” dicts, do the “old” operations work? Mild Shock schrieb: > Hi, > > I recently introduce '$VAR'/1 detection in > writing again. I have now a 100% Prolog written > '$VAR'/1 capable output routine. > > Somehow I found '$VAR'/1 usueful again, especially > in connection with numbersvars/3 which is in > library(compat) the two make a nice pair > > of Swiss army knife for printing. What the > routines don't do, they for example don't check > variable_names/1 option for a cyclic list, so > > I currently get: > > /* Dogelog Player */ > ?- VN = ['U'=X,'V'=Y | VN], write_term(f(X,g(Y,X),Y), > [variable_names(VN)]), nl. > %%% hangs or I wasn't wainting long enough > > But then SWI-Prolog does something strange, > but the error message is funny: > > ?- VN = ['U'=X,'V'=Y | VN], write_term(f(X,g(Y,X),Y), > [variable_names(VN)]), nl. > ERROR: Type error: `list' expected, found `'V'=V' (a compound) > > Does the error message use the variable_names/1 > association list that is in prepaperation somehow, > as a unintended side effect? Or what explains that > > it shows 'V'=V' and not 'V'=Y'? And why does it > complain about compound? And not say something about cyclic? > This here works correctly: > > ?- VN = ['U'=X,'V'=Y], write_term(f(X,g(Y,X),Y), > [variable_names(VN)]), nl. > f(U,g(V,U),V) > > Mild Shock schrieb: >> >> UWN is testing Prolog systems that don't exist anymore: >> >> Jekejeke 1.5.0 >> https://www.complang.tuwien.ac.at/ulrich/iso-prolog/variable_names#73 >> >> a) There is no more publicitly available Jekejeke >> Prolog anymore, I think I wrote UWN already in the >> past about that. >> >> b) There is only Dogelog Player, which has a 100% >> Prolog written read/write predicates including >> the variable_name/1 option. Source code is here, >> you also find GIT access etc to the Prolog system: >> >> Quelltexte und Archive des Dogelog Spieler. >> https://www.xlog.ch/izytab/doclet/docs/07_spec/02_dogelog.html >> >> c) There is an internal version of Jekejeke Prolog, >> which is way after 1.5.0, with version 1.7.0, but >> it also uses the Dogelog Payer 100% Prolog >> written read/write, so no need to test. >> >> >> 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' >> >