help-gnu-emacs
[Top][All Lists]
Advanced

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

hash strangeness


From: Tom
Subject: hash strangeness
Date: Sun, 2 Nov 2014 11:20:37 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Here's a code which gives me some headache. It's silly, because
it was shortened from a longer code to demonstrate the problem.

It is supposed to count something in elisp functions, though
the condition is removed, so with this code the count should be
1 for every function.

So the code checks if the function is already in the hash
and if not then it inserts new info for that function:


(let ((h (make-hash-table :test 'equal)))
  (mapatoms
   (lambda (s)
     (let* ((name (symbol-name s))
            (info (gethash name h)))

       (unless info
         (setq info '(count 0)))

       (setq info (plist-put info
                             'count (1+ (plist-get info 'count))))
                  
       (puthash name info h))))

  (pop-to-buffer "*testout*")
  (erase-buffer)
  (maphash (lambda (name info)
             (insert (format "%s %s" (plist-get info 'count) name) "\n"))
           h))


The new info is newly created in the lambda function (it is
a plist, because in the real code there are other fields too),
yet for some reason the same info structure is used for all
iterations.

I tried to debug it and at the "(unless info" part info is nil
and then it is set to the previous value, though it should be a 
new value.

Am I missing something here?

GNU Emacs 24.1.1 





reply via email to

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