如题,比如: (“kilometre” “km” “千米”) 的对应值都是 “km”
如果有很多这样的 key value pair 时,用那种比较合适? hash table? association list?p-list ?还是 list?
如题,比如: (“kilometre” “km” “千米”) 的对应值都是 “km”
如果有很多这样的 key value pair 时,用那种比较合适? hash table? association list?p-list ?还是 list?
好吧,因为列表里的字符都是用来匹配的,所以我干脆用 regexp-opt
将它生成一个正则表达式,再用正则表达式匹配。
当然原来的问题依然有效,我还是很想知道 elisp 中什么样的数据类型可以实现多个 key 对同一 value。
正则应该是正解。
非String类型的定义Alias,用eval。
能不能举一个具体的例子?谢谢
取决于你需要怎么用?如果需求不存在的话, 可以不用想解决方案。
;; keys internal keys value
;; ----------- ------------------ -------
;; "kilometre" -> "_internal_key_1_" \
;; "km" -> "_internal_key_1_" > 1000
;; "千米" -> "_internal_key_1_" /
(set "kilometer" 1000) ;; 如果不存在 internal key 就创建一个
(associate "kilometer" "km" ) ;; 关联
(get "km") ;; => 1000
(set "km" 2000)
(associate "kilometer" "千米" ) ;; 关联
(get "千米") ;; => 2000
(dissociate "km" 3000) ;; 分裂,使用新的 internal key,并写入新值或拷贝原来的值
(get "km") ;; => 3000
函数名乱写的
需求仍然存在
这算是 alist 和 plist 结合使用吗?
你需要解释你要怎么用?
另外尽量一次性把东西讲清楚,我们不是在聊天。
就是我通过函数取得一个字符串,这个字符串作为 key 来查找对应的 value,value的值也是字符串。
而同一个 value 可以有多个 key 对应。比如我最开始举得那个例子。
或者可以这样理解,我所得到的字符串如果是某个列表的成员,就返回这个列表对应的值。
associate 是什么?我的emacs上没有这个函数?
好吧,刚看见
能不能给一个真正可以 work 的例子,我没太理解你的意思。
我好像知道怎么办了。
用 cl-case
可以得到我所需要的效果
可是这样的话带来的一个后果就是函数本身会写很长。而不是我所钟意的变量和函数分开写的方式。
你可能需要用宏把代码转成更简洁的格式。
我找到了更好的解决方案,用 cl-loop
common lisp 对于我来讲真是一块未知领域,cl-loop 很好很强大。
loop 可能是CL里面最魔幻的宏了。
确实很魔幻