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

Clojure中如何在字符串列表中检索指定子串是否存在

实现方案

核心思路

遍历列表中的每一个字符串元素,检查指定子串是否存在于该元素内,只要任意一个元素满足条件即返回真值。

Common Lisp 实现

Common Lisp 内置的search函数可用于查询子串位置,找不到子串时返回nil,配合你提到的some函数即可实现需求:

;; 查询子串"h"是否存在于列表任意元素中
(some (lambda (str) (search "h" str)) '("hi" "hey" "hello"))

上述代码只要找到任意一个包含子串的元素,就会直接返回子串的起始索引(等效于逻辑真),遍历完所有元素都没找到则返回nil。

你也可以封装成通用的复用函数,额外增加类型判断避免列表存在非字符串元素时报错:

(defun has-substring-in-list (substr str-list)
  (some (lambda (item) (and (stringp item) (search substr item))) str-list))

;; 调用示例
(has-substring-in-list "h" '("hi" "hey" "hello")) ; 返回非nil,代表存在
(has-substring-in-list "x" '("hi" "hey" "hello")) ; 返回nil,代表不存在

Scheme 实现

如果是R7RS标准的Scheme,可以使用内置的string-contains函数实现:

(some (lambda (str) (string-contains str "h")) '("hi" "hey" "hello"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:03