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

如何遍历plist并为每个键输入值后填充到对应位置?

如何遍历plist并为每个键输入值后填充到对应位置?

兄弟,我懂你现在的困扰——之前处理alist的时候得心应手,换成plist就摸不着门道了对吧?别担心,咱们照着你原来的alist思路,稍作调整就能搞定!

首先得明确plist和alist的结构差异:你定义的project-properties是个典型的plist,它是键值交替排列的扁平列表(比如(:number nil :place nil :location nil)),而alist是由一个个(键 . 值)的cons对组成的列表。结构不一样,遍历和赋值的方式自然也得改改。

我给你写了个适配plist的函数,和你原来的alist版本逻辑几乎一致,只是调整了plist特有的处理方式:

(defconst project-properties
  '(:number nil
    :place nil
    :location nil))

(defun project-prompt-properties-plist ()
  "Prompt for project properties and return the filled plist."
  (let ((properties (copy-list project-properties)))
    (cl-loop for prop in project-properties by #'cddr
             do (setf (plist-get properties prop)
                      (read-string (format "Geef %s: " prop))))
    properties))

我给你拆解下关键步骤:

  • 用copy-list复制原plist骨架:这样操作的是副本,不会污染你原本的空骨架,保证下次还能复用。
  • cl-loop遍历所有键:这里的by #'cddr是核心,它让循环每次跳过一个元素(也就是plist里键对应的初始值),直接拿到下一个键,完美适配plist键值交替的结构。
  • 赋值逻辑:用setf配合plist-get,和你alist版本里的alist-get用法几乎一样,把用户输入的值直接写到对应键的位置。
  • 最后返回填充好的plist,你可以直接拿去做后续处理。

你试试调用(project-prompt-properties-plist),会依次弹出输入框让你填每个属性的值,填完就能得到一个完整的、带值的plist啦!

备注:内容来源于stack exchange,提问作者my_display_name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:50:27