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

これは宿題のように見えるので、始めるためのヒントをいくつか紹介します。まず、問題を2つの手順に分割しましょう。最初の手順では、文字列を文字のリストに変換し、探している文字のリストも定義します。空欄に記入してください:

(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。これは、一方のリストの要素のいずれかがもう一方の要素にあるかどうかを判断するための一般的なソリューションです。これは、2つのリストの共通部分が空でないかどうかを示す述語と考えてください。

(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

トリッキーな部分はの2行目にありany-in-listます。要素が別のリストにあるかどうかをどのように判断しますか?このための別のヘルパー手順を作成することもできますが、ドキュメントをざっと見ると、順調に進むことができます。そして、コードをテストすることを忘れないでください。これは期待どおりに機能するはずです。

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

1つの解決策は次のとおりです。

  1. 文字列を文字のリストに変換します(string-> list
  2. リストを繰り返し処理し、母音文字(文字)を確認します
于 2013-02-27T00:02:10.017 に答える