You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:45:39