小编use*_*577的帖子

修改Common Lisp和Let中的哈希表

我一直在尝试使用以下代码修改哈希表

(let ((alist '(gethash key *hash-table*)))
  (setf alist (cons 'key 'weight)))
Run Code Online (Sandbox Code Playgroud)

但问题是它实际上并没有修改哈希表(也请注意

(let ((alist (gethash key *hash-table*)))
  (setf alist (cons 'key 'weight)))
Run Code Online (Sandbox Code Playgroud)

也不起作用,而以下代码确实有效.

(setf (gethash key *hash-table*) (cons 'key 'weight)))
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这个有效而另一个无效.这很有用(在此代码片段之外)因为(我假设)这就是为什么我不能运行像这样的函数

(alist-initialize (gethash key *hash-table*))
Run Code Online (Sandbox Code Playgroud)

定义是:

(defun alist-initialize (alist)
  (setf alist (cons 'a 'b))
Run Code Online (Sandbox Code Playgroud)

lisp evaluation hashtable common-lisp

2
推荐指数
1
解决办法
520
查看次数

标签 统计

common-lisp ×1

evaluation ×1

hashtable ×1

lisp ×1