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

Common Lisp如何从嵌套列表中拆分字符串并提取指定元素生成新列表

正确实现代码

你现有的字符串拆分逻辑是正常可用的,针对嵌套列表场景的提取逻辑可以按如下方式编写:

;; 替换 *your-nested-list* 为你实际的原始嵌套列表变量名
(defparameter *list1*
  (loop for sublist in *your-nested-list*
        ;; 取子列表中索引为3的目标字符串,和你原有逻辑对应
        for target-str = (nth 3 sublist)
        ;; 拆分字符串得到分段列表
        for split-result = (my-split target-str :delimiterp #'delimiterp)
        ;; 提取第三个分段(索引从0计数,第三个对应索引2)中的数字,自动忽略后缀非数字字符
        for target-num = (parse-integer (nth 2 split-result) :junk-allowed t)
        ;; 收集每轮的数字生成最终列表
        collect target-num))

如果是示例中的单层字符串列表,验证代码如下:

(defparameter *demo-input* '("4-No 16dia" "6-No 20dia"))
(defparameter *demo-output*
  (loop for str in *demo-input*
        for parts = (my-split str :delimiterp #'delimiterp)
        collect (parse-integer (nth 2 parts) :junk-allowed t)))
;; 执行后 *demo-output* 的值为 (16 20),符合需求

原有代码的问题说明

  • loop语法错误,缺少collect关键字来收集每轮运算的结果,不需要用append拼接,直接收集单个数值即可
  • 索引计数错误:Common Lisp中序列索引从0开始计数,my-split返回的分段列表的第三个元素对应nth 2而非nth 0
  • 新增parse-integer的:junk-allowed t参数,可自动过滤16dia这类字符串后缀的非数字内容,直接提取前缀数字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:06:02