【发布时间】:2016-05-01 08:38:17
【问题描述】:
我有以下功能:
(defun inc-map ()
(let ((ht #s(hash-table test contents-hash)))
(dolist (i (list 1 2 3 4))
(let ((old-val (or (gethash "foo" ht)
0)))
(puthash "foo" (+ 1 old-val) ht)))
ht))
尽管该函数似乎在本地定义了ht 符号,但该函数似乎不是引用透明的。特别是调用一次返回哈希表"foo" -> 4,第二次调用返回"foo" -> 8,第三次返回"foo" -> 12,以此类推。
这里到底发生了什么?如何将此函数更改为引用透明(并且每次都返回"foo" -> 4)?
【问题讨论】: