これは宿題のように見えるので、始めるためのヒントをいくつか紹介します。まず、問題を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