Urn Lisp中getf的等效替代函数是什么?
Urn Lisp中替代getf的方法
你运行代码报错是因为Urn Lisp并没有内置Common Lisp中的getf函数。针对你用列表模拟属性列表(plist)的场景,有两种常用替代方案:
方案1:针对plist列表使用assoc + cdr
Urn标准库中的assoc函数可在键值对列表中查找第一个匹配的键,返回包含键和值的cons单元,再通过cdr提取对应的值:
(cdr (assoc :a (list :a 1 :b 2 :c 3)))
执行后会返回1,和你预期的getf效果一致。
方案2:使用Urn的字典类型(更推荐)
Urn提供了更适合键值对操作的字典类型,用dict构造字典,再用dict-get获取值,写法更直观:
(dict-get (dict :a 1 :b 2 :c 3) :a)
这种方式是Urn中处理键值映射的惯用方式,比普通列表模拟plist更高效。
你之前尝试的错误提示选项(let、if等)和getf功能无关,因此无法解决问题。
你的错误信息:
[ERROR] Cannot find variable 'getf' Did you mean any of these? •let •if •set! •let* •self => <stdin>:[1:2 .. 1:5] 1 │ (getf (list :a 1 :b 2 :c 3) :a) │ ^^^^ >
内容的提问来源于stack exchange,提问作者gwbasic
相关产品推荐
相关产品推荐

