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

Scheme中实现字符串元音移除时遇string?参数错误如何解决?

错误原因分析

  • string? 是判断输入是否为字符串类型的谓词,仅支持1个入参,你传入了多个参数不符合函数定义,是直接报错的原因
  • 调用string->list把字符串转为列表后,列表内的每个元素是字符类型,不是字符串类型,本身就不能用string?做匹配判断
  • 原有逻辑还存在两处问题:
    1. 列表只剩一个元素时直接返回空,会丢失最后一个非元音字符
    2. 匹配到元音后的递归调用错用了接收字符串参数的devowel,应该调用处理字符列表的devowel/list

修复后代码

(define (devowel str)
  (list->string (devowel/list (string->list str))))

(define (devowel/list char-list)
  (cond
    [(empty? char-list) empty]
    [else 
     (let ([current (first char-list)])
       ; 判断当前字符是否为元音(覆盖大小写)
       (if (or (equal? current #\a)
               (equal? current #\e)
               (equal? current #\i)
               (equal? current #\o)
               (equal? current #\u)
               (equal? current #\A)
               (equal? current #\E)
               (equal? current #\I)
               (equal? current #\O)
               (equal? current #\U))
           ; 是元音则跳过,直接处理剩余字符
           (devowel/list (rest char-list))
           ; 非元音则拼接当前字符后处理剩余
           (cons current (devowel/list (rest char-list)))))]))

(devowel "apple") ; 运行结果为 "ppl"

注:实现仅用到了要求的list->string和string->list两个指定函数,其余equal?、or、cond等都是Scheme基础语法/通用基础谓词,不在限制范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:18:03