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

如何在Clojure中实现列表元素的新增与更新操作

修正后的实现代码

(defn update-env 
  [env-global key value]
  (if (and (list? value) (= (first value) '*error*))
    env-global
    (let [kv-pairs (partition 2 env-global)
          exists? (some #(= (first %) key) kv-pairs)]
      (->> kv-pairs
           (map (fn [[k v]] (if (= k key) [k value] [k v])))
           (apply concat)
           (#(if exists? % (concat % (list key value))))))))

逻辑说明

  • 保留原有的错误值判断逻辑:如果传入值是开头为*error*的列表,直接返回原环境不做修改
  • 先通过partition 2把扁平的交替键值列表拆分为两两一组的键值对,方便匹配目标键
  • 遍历所有键值对,匹配到目标键就替换对应值,其余键值对保持不变
  • 处理完成后重新拼接为扁平列表
  • 额外判断目标键是否原本存在:不存在就把新键值对追加到列表末尾,兼容新增场景

测试验证

调用测试用例:

(update-env '(+ add - sub x 1 y 2) 'x 3)

返回结果:

(+ add - sub x 3 y 2)

完全符合预期要求。


内容的提问来源于stack exchange,提问作者Padefi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:06