From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Roland Orre Newsgroups: gmane.lisp.guile.user Subject: Re: Keyword syntax Date: Mon, 04 Oct 2004 20:44:49 +0200 Organization: Royal Institute of Technology Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Message-ID: <1096915489.27534.41.camel@localhost> References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1096915739 24439 80.91.229.6 (4 Oct 2004 18:48:59 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 4 Oct 2004 18:48:59 +0000 (UTC) Cc: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Mon Oct 04 20:48:51 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1CEXtC-0002Xd-00 for ; Mon, 04 Oct 2004 20:48:50 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CEXzn-0003lC-Bj for guile-user@m.gmane.org; Mon, 04 Oct 2004 14:55:39 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1CEXzF-0003Y1-W3 for guile-user@gnu.org; Mon, 04 Oct 2004 14:55:06 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1CEXzD-0003X7-0K for guile-user@gnu.org; Mon, 04 Oct 2004 14:55:03 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CEXzC-0003X2-MH for guile-user@gnu.org; Mon, 04 Oct 2004 14:55:02 -0400 Original-Received: from [130.237.222.202] (helo=smtp.nada.kth.se) by monty-python.gnu.org with esmtp (TLSv1:DES-CBC3-SHA:168) (Exim 4.34) id 1CEXs8-0005Vg-MX for guile-user@gnu.org; Mon, 04 Oct 2004 14:47:45 -0400 Original-Received: from c640 (localhost [127.0.0.1]) (authenticated bits=0) by smtp.nada.kth.se (8.12.10/8.12.1) with ESMTP id i94Ilfph028667; Mon, 4 Oct 2004 20:47:41 +0200 (MEST) Original-To: Marius Vollmer In-Reply-To: X-Mailer: Ximian Evolution 1.4.6 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: main.gmane.org gmane.lisp.guile.user:3507 X-Report-Spam: http://spam.gmane.org/gmane.lisp.guile.user:3507 I like 1 more also. (I often use the non standard scheme way of reading values with #something but I don't think that will be a problem) Roland On Mon, 2004-10-04 at 20:27, Marius Vollmer wrote: > Hi, > > I'm considering to change keywords are read or written by Guile, to > make the two operations more consistent with each other. > > Right now, keywords are read as a single token and a part of that > token is made the keyword name, which is a symbol. > > For example, a token can be "#:foo" (without the double quotes) and > the name of the keyword is the symbol named "foo". Also, "#:12" gives > a keyword with a symbol as the name that itself has the name "12". > Now, "12" is not a valid way to write this symbol in Scheme, and there > for Guile writes the keyword #:12 in the following funny way: > > guile> #:12 > #:#{12}# > > The "#{12}#" is the syntax to write a symbol with an arbitrary name. > > However, reading this printed form gives a different keyword. > > guile> #:#{12}# > #:#{\#{12}\#}# > > > I can see two ways to fix this: 1) changing the way keywords are read and > 2) changing the way they are printed. > > As to 1), the simplest change would be to just do the equivalent of > (symbol->keyword (read port)). Thus, the name of a keyword is read as > a general Scheme datum, and is then validated to be a symbol and > converted to a keyword. > > For 2), we would have to print keyword without using the symbol > printer and would have to explicitely deal with 'weird' keyword names > ourselves. > > I have implemented 1) in CVS head as an experiment. Below is a sample > session, showing the differences. > > I like 1) more than 2) (by a small margin) although it is a more > radical change since keywords right now are defined to have symbols as > names anyway and because it is equivalent to doing > > (read-hash-extend #\: > (lambda (chr port) > (symbol->keyword (read port)))) > > which I like because it is very straightforward. > > > Previously > > guile> #:12 > #:#{12}# > guile> #:#{12}# > #:#{\#{12}\#}# > guile> #:(a b c) > #:#{}# > ERROR: In expression (a b c): > Unbound variable: a > guile> #: foo > #:#{}# > ERROR: Unbound variable: foo > > With 1) > > guile> #:12 > ERROR: Wrong type (expecting symbol): 12 > guile> #:#{12}# > #:#{12}# > guile> #:(a b c) > ERROR: Wrong type (expecting symbol): (a b c) > guile> #: foo > #:foo > > Opinions? > > > _______________________________________________ > Guile-user mailing list > Guile-user@gnu.org > http://lists.gnu.org/mailman/listinfo/guile-user _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user