On Thu, Mar 5, 2009 at 9:38 PM, Praveen D V <[email protected]> wrote: > hi, > > On Thu, Mar 5, 2009 at 8:17 PM, Linas Vepstas <[email protected]> wrote: >> 2009/3/5 <[email protected]>: >>> hi Group, >>> >>> I executed these commands.. >>> >>> $ guile >>> guile> (define mc (cons 'a 'b)) >>> guile> mc >>> (a . b) >>> guile> (define ml (list 1 2 mc)) >>> guile> ml >>> (1 2 (a . b)) >>> guile> (list mc 1 2 3) >>> ((a . b) 1 2 3) >>> guile> (define mh (make-hash-table 2)) >>> guile> (hashq-create-handle! mh 'one mc) >>> (one a . b) >>> guile> (hashq-create-handle! mh 'two ml) >>> (two 1 2 (a . b)) >>> guile> mh >>> #(((two 1 2 (a . b)) (one a . b)) ()) > > Small correction, just checked on my cygwin(on windows now), it prints as > #(((two 1 2 (a . b)) ((one a . b))) > Also, not sure of the last '()'. Just a did a cut&paste, something went > wrong. > >>> guile> (use-modules (ice-9 pretty-print)) >>> guile> (pretty-print mh) >>> #(((two 1 2 (a . b)) (one a . b)) ()) >>> guile> >>> >>> I was expecting handle:'one of hash:mh to be printed in parens as >>> #(((two 1 2 (a . b)) (one (a . b))) ()) >> >> According to your logic, you must have also been expecting >> #(((two (1 2 (a . b))) (one (a . b))) ()) >> >> which is not what you wrote. > > No, not at all. All I was expecting(assumed), cons always > prints as "( x . y )". Notice > 1. In list it is printed as assumed; either first or last element. > 2. In hash it prints as assumed; if it is not the first element in value.
Please read it as "In hash it prints as assumed; if it is not the ONLY member in value." > If ml2 was created as > guile> (define ml2 (list mc 1 2)) > guile> ml2 > ((a . b) 1 2) > and if ml2 was used as value in a hash > guile> (hashq-create-handle! mh 'one ml2) > guile>mh > #(((two 1 2 (a . b)) ((one (a . b) 1 2)))) > Question remains same, why is the behavior different if value is 'cons'? > >>> Why is behaviour of print for a hash different from others? >>> Am I missing anything? >> >> When I read the documentation, I see: >> Return the (key . value) pair for key in the given hash table. If key >> is not in table then create an entry for it with init as the value, >> and return that pair. >> >> Notice the dot between key and value, which means that >> hashq-create-handle! behaves like cons, and not like list; >> from your mail, it seems that you were expecting it to >> behave like list. > > Hope I'm clear this time. > > --regards, Paveen >
