From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: pjb@informatimago.com (Pascal J. Bourguignon) Newsgroups: gmane.emacs.help Subject: Re: Hash-table elements Date: Thu, 01 Oct 2009 17:18:48 +0200 Organization: Anevia SAS Message-ID: <7cpr97gn1j.fsf@pbourguignon.lefevre.anevia.com> References: <0c37c5b5-6683-4705-a2e4-e0c5ccb34614@e12g2000yqi.googlegroups.com> <7c7hvhki0b.fsf@pbourguignon.lefevre.informatimago.com> <5230b46a-f95e-4497-a6e7-5c7d71d30b87@l2g2000yqd.googlegroups.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1254411819 29070 80.91.229.12 (1 Oct 2009 15:43:39 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 1 Oct 2009 15:43:39 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Oct 01 17:43:32 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MtNoU-000725-Dc for geh-help-gnu-emacs@m.gmane.org; Thu, 01 Oct 2009 17:43:28 +0200 Original-Received: from localhost ([127.0.0.1]:37416 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MtNoT-0000SQ-Pb for geh-help-gnu-emacs@m.gmane.org; Thu, 01 Oct 2009 11:43:25 -0400 Original-Path: news.stanford.edu!usenet.stanford.edu!fu-berlin.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.straub-nv.de!proxad.net!feeder1-2.proxad.net!cleanfeed2-a.proxad.net!nnrp2-2.free.fr!not-for-mail Original-Newsgroups: gnu.emacs.help Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en X-Disabled: X-No-Archive: no User-Agent: Gnus/5.101 (Gnus v5.10.10) Emacs/22.2 (gnu/linux) Cancel-Lock: sha1:ld/lspDoOtGv1vCx/hXlcCJgXhg= Original-Lines: 54 Original-NNTP-Posting-Date: 01 Oct 2009 17:18:48 MEST Original-NNTP-Posting-Host: 88.170.236.224 Original-X-Trace: 1254410328 news-4.free.fr 440 88.170.236.224:60042 Original-X-Complaints-To: abuse@proxad.net Original-Xref: news.stanford.edu gnu.emacs.help:173489 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:68604 Archived-At: Nordl=F6w writes: > On Sep 29, 3:17=A0pm, p...@informatimago.com (Pascal J. Bourguignon) > wrote: >> Nordl=F6w writes: >> > Can hash-tables contain references other "global" structures? >> >> > I have a hash-table that maps filenames to their metadata,file-scan- >> > hits/misses. >> > I don't want to pull-change-push the whole meta-data value whenever I >> > change parts of these metadata/hits. >> >> > Is this possible somehow? >> >> Yes. =A0Only do not modify the keys! =A0You wouldn't be able to retrieve >> them, since changing the state of a key would probably change its hash >> value, and therefore the bucket where the hash-table stored it. >> But you can do whatever you want on the value. >> >> (require 'cl) >> (let ((h (make-hash-table))) >> >> =A0 =A0(let ((value (list 1 2 3)) >> =A0 =A0 =A0 =A0 =A0(key =A0 :my-list)) >> >> =A0 =A0 =A0 (setf (gethash key h) value) >> =A0 =A0 =A0 (setf (car value) 0 >> =A0 =A0 =A0 =A0 =A0 =A0 (cdr value) 'z) >> =A0 =A0 =A0 (gethash key h))) >> --> (0 . z) >> >> -- >> __Pascal Bourguignon__ > > So with the use of setf() we realize the reference pattern in Emacs- > Lisp as we use pointers in C? > > So the value of (gethash key h) is actually a reference to "value" and > when "value" goes out of scope the interpreter knows that it is > referenced from another structure and does not delete its contents? > > I have understood it correctly? Yes.=20=20 However, some data types are immutable. (Out of blue, I can think only of numbers in emacs lisp that are immutable). For these immutable data types, since you cannot modify them, the system could make copy of them, instead of using references.=20=20 --=20 __Pascal Bourguignon__