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

求助:在Scheme中实现筛选包含指定字符的单词的`words-containing`函数

排查words-containing函数的问题并修复

我来帮你看看代码里的问题,以及怎么修正它~

你的代码存在两个核心问题:

  • 错误的比较逻辑:你写的(equal? (car all-words) char)是把整个单词(一个字符列表,比如'(#\h #\i))和单个字符(比如#\i)做比较,这永远不会返回#t,因为两者类型都不一样。
  • 没有收集符合条件的单词:不管判断结果如何,你的代码只是递归处理剩余列表,完全没把包含目标字符的单词加入结果里,自然得不到预期输出。

正确的实现方案

我们需要先检查当前单词里是否包含目标字符,如果包含就把它加入结果列表,再继续处理剩下的单词;如果不包含就直接处理剩下的单词。这里可以用Scheme内置的member函数来判断字符是否在单词列表中:

(define (words-containing all-words char)
  (cond
    [(empty? all-words) '()]  ; 空列表直接返回空
    [(member char (car all-words))  ; 检查当前单词是否包含目标字符
     (cons (car all-words) (words-containing (cdr all-words) char))]  ; 包含的话把单词加入结果,再递归处理剩余
    [else
     (words-containing (cdr all-words) char)]))  ; 不包含就直接递归处理剩余

示例验证

比如调用:

(words-containing '((#\a #\b) (#\c #\d) (#\x #\a #\y)) #\a)

会返回预期结果:'((#\a #\b) (#\x #\a #\y))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:02:39