guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Weird behavior of hash-table


From: Zelphir Kaltstahl
Subject: Re: Weird behavior of hash-table
Date: Sun, 24 Nov 2019 11:51:25 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0

Hi Mark!

Thank you, that is the solution and the explanation!

I read my procedures multiple times, wondering whether I am returning
another hash table or anything. It would have taken me a long time
before trying to create the vector without the additional quotes.

Regards,
Zelphir

On 11/24/19 9:04 AM, Mark H Weaver wrote:
> Hi Zelphir,
>
> Zelphir Kaltstahl <address@hidden> writes:
>
>> I've noticed a strange behavior of hash tables. I put in symbols as keys
>> and integers as values, but when I try to get the integers out again by
>> using the same symbol, I get back a #f instead. Here is the code I am using:
>>
>> ~~~~~~~~
>> (use-modules
>>  ;; SRFI 60: procedures for treating integers as bits
>>  (srfi srfi-60)
>>  (ice-9 hash-table))
>>
>>
>> (define SQUARES
>>   ;; vector, constant time access
>>   #('A1 'B1 'C1 'D1 'E1 'F1 'G1 'H1
>>     'A2 'B2 'C2 'D2 'E2 'F2 'G2 'H2
>>     'A3 'B3 'C3 'D3 'E3 'F3 'G3 'H3
>>     'A4 'B4 'C4 'D4 'E4 'F4 'G4 'H4
>>     'A5 'B5 'C5 'D5 'E5 'F5 'G5 'H5
>>     'A6 'B6 'C6 'D6 'E6 'F6 'G6 'H6
>>     'A7 'B7 'C7 'D7 'E7 'F7 'G7 'H7
>>     'A8 'B8 'C8 'D8 'E8 'F8 'G8 'H8))
> I guess that you meant for this to be a vector of symbols.  In fact, it
> is a vector of lists of the form (quote <symbol>), for which '<symbol>
> is a shorthand.
>
>   scheme@(guile-user)> (vector-ref SQUARES 0)
>   $10 = (quote A1)
>
> To fix the problem, remove all of the apostrophes (') from the elements
> of the vector literal above.  Like list literals, vector literals take
> raw values, not expressions.
>
>> (hash-ref SQUARES-TO-INTEGERS 'A1)
>   scheme@(guile-user)> (hash-ref SQUARES-TO-INTEGERS 'A1)
>   $11 = #f
>   scheme@(guile-user)> (hash-ref SQUARES-TO-INTEGERS ''A1)
>   $12 = 1
>
>        Mark



reply via email to

[Prev in Thread] Current Thread [Next in Thread]