* Immutable rnrs hashtable
@ 2012-11-25 23:00 Sjoerd van Leent Privé
2012-11-26 1:07 ` Ian Price
2012-11-26 1:25 ` Ian Price
0 siblings, 2 replies; 7+ messages in thread
From: Sjoerd van Leent Privé @ 2012-11-25 23:00 UTC (permalink / raw
To: guile-devel
Hi all,
I might have found an issue using commit
06906f370f77cbab520ff0d3c47449526934a9c8 (stable-2.0). I am attempting
to do a hashtable-copy using rnrs hashtables, and set the mutable flag
to #:t (according to documentation this should make it immutable, a bit
odd). I attempted #:f as well. It appears the output hashtable is still
mutable.
Can someone check this?
Regards,
Sjoerd
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-25 23:00 Immutable rnrs hashtable Sjoerd van Leent Privé
@ 2012-11-26 1:07 ` Ian Price
2012-11-26 1:25 ` Ian Price
1 sibling, 0 replies; 7+ messages in thread
From: Ian Price @ 2012-11-26 1:07 UTC (permalink / raw
To: Sjoerd van Leent Privé; +Cc: guile-devel
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=iso-2022-jp-2, Size: 2070 bytes --]
Sjoerd van Leent Priv^[$(D+1^[(B <svanleent@gmail.com> writes:
> Hi all,
>
> I might have found an issue using commit
> 06906f370f77cbab520ff0d3c47449526934a9c8 (stable-2.0). I am attempting
> to do a hashtable-copy using rnrs hashtables, and set the mutable flag
> to #:t (according to documentation this should make it immutable, a
> bit odd). I attempted #:f as well. It appears the output hashtable is
> still mutable.
Firstly, according to the R6RS, if the mutable argument is provided, and
is true, then the hashtable is mutable. Otherwise it is immutable.
http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-14.html#node_idx_1200
Secondly, #f or #:f ? #:f is a keyword, and since it isn't #f, is considered a
true value. Therefore, the hashtable should be mutable.
A quick repl transcript
scheme@(guile^[$B!]^[(Buser)> (make-eqv-hashtable)
$10 = #<r6rs:record:r6rs:hashtable>
scheme@(guile^[$B!]^[(Buser)> (hashtable-set! $10 'foo 'bar)
scheme@(guile^[$B!]^[(Buser)> (hashtable-copy $10 #t)
$11 = #<r6rs:record:r6rs:hashtable>
scheme@(guile^[$B!]^[(Buser)> (hashtable-ref $11 'foo #f)
$12 = bar
scheme@(guile^[$B!]^[(Buser)> (hashtable-set! $11 'baz 'zot)
scheme@(guile^[$B!]^[(Buser)> (hashtable-copy $10 #f)
$13 = #<r6rs:record:r6rs:hashtable>
scheme@(guile^[$B!]^[(Buser)> (hashtable-ref $13 'foo #f)
$14 = bar
scheme@(guile^[$B!]^[(Buser)> (hashtable-set! $13 'baz 'zot)
scheme@(guile^[$B!]^[(Buser)> (hashtable-ref $13 'baz #f)
$15 = #f
scheme@(guile^[$B!]^[(Buser)> (hashtable-mutable? $11)
$16 = #t
scheme@(guile^[$B!]^[(Buser)> (hashtable-mutable? $13)
$17 = #f
and, it appears to that the mutable argument works as expected. $13 is
not mutable, and it does not add an association for 'baz when I tried
it. The only concern I have is that it fails silently, however, since
the r6rs doesn't say anything about the behaviour of hashtable-set! and
hashtable-update! on immutable hashtables, this would be allowed.
--
Ian Price -- shift-reset.com
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-25 23:00 Immutable rnrs hashtable Sjoerd van Leent Privé
2012-11-26 1:07 ` Ian Price
@ 2012-11-26 1:25 ` Ian Price
2012-11-26 9:44 ` Sjoerd van Leent Privé
2012-11-26 16:34 ` Ludovic Courtès
1 sibling, 2 replies; 7+ messages in thread
From: Ian Price @ 2012-11-26 1:25 UTC (permalink / raw
To: Sjoerd van Leent Privé; +Cc: guile-devel
[-- Attachment #1: Type: text/plain, Size: 345 bytes --]
Whoops, in my haste, I forgot to note that this _is_ a bug in guile's
documentation, not in the implementation. Suggested fix included.
Ludovic, Andy:
Should I add him to THANKS too?
--
Ian Price -- shift-reset.com
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: docs patch --]
[-- Type: text/x-patch, Size: 972 bytes --]
From 085552d83d647a05b8ab33810ce50401d0f3afe4 Mon Sep 17 00:00:00 2001
From: Ian Price <ianprice90@googlemail.com>
Date: Mon, 26 Nov 2012 01:24:51 +0000
Subject: [PATCH] Fix docs for `hashtable-copy'
* doc/ref/r6rs.texi (rnrs hashtables): a true mutable argument means a
mutable copy.
---
doc/ref/r6rs.texi | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/ref/r6rs.texi b/doc/ref/r6rs.texi
index f9bc9e9..2028ada 100644
--- a/doc/ref/r6rs.texi
+++ b/doc/ref/r6rs.texi
@@ -2101,8 +2101,8 @@ immutable.
@deffn {Scheme Procedure} hashtable-copy hashtable
@deffnx {Scheme Procedure} hashtable-copy hashtable mutable
Returns a copy of the hash table @var{hashtable}. If the optional
-argument @var{mutable} is a true value, the new hash table will be
-immutable.
+argument @var{mutable} is provided and is a true value, the new hash
+table will be mutable.
@end deffn
@deffn {Scheme Procedure} hashtable-clear! hashtable
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-26 1:25 ` Ian Price
@ 2012-11-26 9:44 ` Sjoerd van Leent Privé
2012-11-26 10:28 ` Ian Price
2012-11-26 16:34 ` Ludovic Courtès
1 sibling, 1 reply; 7+ messages in thread
From: Sjoerd van Leent Privé @ 2012-11-26 9:44 UTC (permalink / raw
To: Ian Price; +Cc: guile-devel
Hi Ian,
The implementation is okay, I wrote a half baked example, as I
understood the bit to be the mutable field. But it should act in
reverse. Got it. In many cases, I use info-lookup-symbol in Guile's
documentation, as it is much easier to navigate than the RNRS website
(which I consider bad design, as there is no sensible hierarchy
whatsoever or something of a decent index).
This is why I got it wrong, as the documentation was mistaken, and I did
the opposite of what I should be doing. And yes, I was using #t and #f,
But I expected the results to be the other way around.
Btw, isn't their a hashtable which is more pure in it's implementation?
The RNRS and SRFI-69 versions are having quite some side-effects. I
would have expected a method like "hashtable-add" which copies an
existing hashtable, adds values and returns a new hashtable. I know, I
prefer pure functional implementations...
Sjoerd
On 11/26/2012 02:25 AM, Ian Price wrote:
> Whoops, in my haste, I forgot to note that this _is_ a bug in guile's
> documentation, not in the implementation. Suggested fix included.
>
> Ludovic, Andy:
> Should I add him to THANKS too?
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-26 9:44 ` Sjoerd van Leent Privé
@ 2012-11-26 10:28 ` Ian Price
2012-11-26 14:18 ` Sjoerd van Leent Privé
0 siblings, 1 reply; 7+ messages in thread
From: Ian Price @ 2012-11-26 10:28 UTC (permalink / raw
To: Sjoerd van Leent Privé; +Cc: guile-devel
Sjoerd van Leent Privé <svanleent@gmail.com> writes:
> Btw, isn't their a hashtable which is more pure in it's
> implementation? The RNRS and SRFI-69 versions are having quite some
> side-effects. I would have expected a method like "hashtable-add"
> which copies an existing hashtable, adds values and returns a new
> hashtable. I know, I prefer pure functional implementations...
You could look up vhashes in the manual. Alternatively, if your data
has an ordering you can use (pfds bbtrees) from my pfds collection[0]
0. https://github.com/ijp/pfds or guild install pfds
--
Ian Price -- shift-reset.com
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-26 10:28 ` Ian Price
@ 2012-11-26 14:18 ` Sjoerd van Leent Privé
0 siblings, 0 replies; 7+ messages in thread
From: Sjoerd van Leent Privé @ 2012-11-26 14:18 UTC (permalink / raw
To: Ian Price; +Cc: guile-devel
Hi Ian,
Thanks for the suggestions. I will certainly have a look at those. I
believe the bbtrees can come in handy. Can certainly give it a go.
Sjoerd
On 11/26/2012 11:28 AM, Ian Price wrote:
> Sjoerd van Leent Privé <svanleent@gmail.com> writes:
>
>> Btw, isn't their a hashtable which is more pure in it's
>> implementation? The RNRS and SRFI-69 versions are having quite some
>> side-effects. I would have expected a method like "hashtable-add"
>> which copies an existing hashtable, adds values and returns a new
>> hashtable. I know, I prefer pure functional implementations...
> You could look up vhashes in the manual. Alternatively, if your data
> has an ordering you can use (pfds bbtrees) from my pfds collection[0]
>
>
> 0. https://github.com/ijp/pfds or guild install pfds
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Immutable rnrs hashtable
2012-11-26 1:25 ` Ian Price
2012-11-26 9:44 ` Sjoerd van Leent Privé
@ 2012-11-26 16:34 ` Ludovic Courtès
1 sibling, 0 replies; 7+ messages in thread
From: Ludovic Courtès @ 2012-11-26 16:34 UTC (permalink / raw
To: guile-devel
Hi!
Ian Price <ianprice90@googlemail.com> skribis:
> Whoops, in my haste, I forgot to note that this _is_ a bug in guile's
> documentation, not in the implementation. Suggested fix included.
Good catch, please push!
> Ludovic, Andy:
> Should I add him to THANKS too?
That’s a good idea in general, yes.
Ludo’.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-11-26 16:34 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-25 23:00 Immutable rnrs hashtable Sjoerd van Leent Privé
2012-11-26 1:07 ` Ian Price
2012-11-26 1:25 ` Ian Price
2012-11-26 9:44 ` Sjoerd van Leent Privé
2012-11-26 10:28 ` Ian Price
2012-11-26 14:18 ` Sjoerd van Leent Privé
2012-11-26 16:34 ` Ludovic Courtès
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).