0

如何在 Dr. Racket 中创建函数使用字符串str并在str至少有一个元音时产生 true ,如果str没有元音则产生 false。

元音是以下字符集:A、a、E、e、I、i、O、o、U、u。

例如:

         (has-vowel? "whatever") => true 
         (has-vowel? "trythnks") => false

@ÓscarLópez 这就是我迄今为止想出的。该函数可以判断第一个字母是否为元音。我现在的问题是,如何获得检查其他字母的功能?

我在 Scheme 中不断收到此错误 (其余:需要一个非空列表;给定“字符串”)

我不知道如何修复它。非常欢迎任何帮助/建议。谢谢。

4

2 回答 2

1

这看起来像家庭作业,所以我会给你一些开始的提示。首先,让我们将问题拆分为两个过程 - 第一个过程将字符串转换为字符列表,并且还将定义我们要查找的字符列表。填空:

(define (has-vowel? str)
  (any-in-list        ; helper procedure, we'll get to this later
   (<???> str)        ; how to transform a string into a list of chars?
   '(#\A #\a <???>))) ; list of vowels

有了上面的过程,我们就可以编写我们的辅助过程了any-in-list。这是确定一个列表中的任何元素是否在另一个列表中的通用解决方案 - 将其视为判断两个列表的交集是否为非空的谓词:

(define (any-in-list lst check)
  (cond (<???> <???>) ; if lst is empty, we didn't find any element, return #f
        (<???> #t)    ; return #t if the first element in lst is in check
        (else (any-in-list <???> check)))) ; else advance the recursion over lst

棘手的部分在any-in-list. 我们如何确定一个元素是否在另一个列表中?我们可以为此编写另一个帮助程序,但快速查看文档会让您走上正轨。并且不要忘记测试您的代码,这应该可以按预期工作:

(has-vowel? "whatever")
=> #t
(has-vowel? "trythnks")
=> #f
于 2013-02-27T00:34:51.957 回答
0

一种解决方案是:

  1. 将字符串转换为字符列表(string->list
  2. 遍历列表并检查元音字符(字符
于 2013-02-27T00:02:10.017 回答