gpt4 book ai didi

initialization - 通用 Lisp : shorthand to initialize a hash table with many entries

转载 作者:行者123 更新时间:2023-12-04 06:46:29 25 4
gpt4 key购买 nike

我正在寻找一种可能的非详细可移植方式来初始化 Common Lisp 中的哈希表。例如。适用于常量哈希表的东西,也适用于预加载变量哈希。在 CLISP 我使用:

(defconstant +my-map+ #S(HASH-TABLE :TEST FASTHASH-EQ
(key1 . "value1")
...
(keyN . "valueN")
))

但不幸的是,这种格式仅适用于 CLISP。

最佳答案

可以在读取时以编程方式构建哈希表:

(defvar *ht* #.(let ((ht (make-hash-table)))
(loop for (key . value) in
'((a . 1) (b . 2) (c . 3))
do (setf (gethash key ht) value))
ht))

(describe *ht*)
#.用于读取时间评估。然后编译器会将哈希表转储到 FASL 文件中。

然后可以编译:

使用 SBCL:
* (compile-file "/tmp/test.lisp")

; compiling file "/private/tmp/test.lisp" (written 24 MAY 2012 10:08:49 PM):
; compiling (DEFVAR *HT* ...)
; compiling (DESCRIBE *HT*)

; /tmp/test.fasl written
; compilation finished in 0:00:00.360
#P"/private/tmp/test.fasl"
NIL
NIL
* (load *)

#<HASH-TABLE :TEST EQL :COUNT 3 {100299EA43}>
[hash-table]

Occupancy: 0.2
Rehash-threshold: 1.0
Rehash-size: 1.5
Size: 16
Synchronized: no
T
* *ht*

#<HASH-TABLE :TEST EQL :COUNT 3 {100299EA43}>

创建一个哈希表作为一个函数:
(defun create-hashtable (alist
&key (test 'eql)
&aux (ht (make-hash-table :test test)))
(loop for (key . value) in alist
do (setf (gethash key ht) value))
ht)

关于initialization - 通用 Lisp : shorthand to initialize a hash table with many entries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com