リストから与えられた文字で始まる単語を見つける

私は文字列のリストから特定の文字で始まる単語を見つけようとしています。ユーザーは単語のリストと開始文字を入力します。たとえば、次のようなものです。

"テーブルペンシルチェアデスクペン" "p"

したがって、 p で始まる単語(この場合は pen pencil )を表示する必要があります。私の最初のステップは、 words 関数を使って文字列を文字列のリストに分割することです。そして、どのような手紙が各単語から始まるのかを私はどのようにして見つけます関数の型は次のようになります。

--------------Find words Starting with a given letter------------------

findWords :: String -> Char -> [String]
4
この宿題ですか?はいの場合は、そのようにタグ付けする必要があります。
追加された 著者 Niklas B.,
これは、haskellでほとんど仕事をしていない種類の仕事の学校の本の例です。さて、それを自分で試してみてください。そして、まだ助けが必要なら、ここに戻ってください。しかし、あなたがもう助けを必要としないなら、私は驚かないでしょう。
追加された 著者 Jasper,

3 答え

filter を使用します。

foo string = filter startsWithP (words string)

次に、定義する必要があります

startsWithP :: String -> Bool

より有用なのは汎用バリアントです

startsWith :: String -> Char -> Bool

"foo" `startsWith` 'f' のように使用されます。

5
追加された
私はハズケルの新人です。私は上記のコードを取得しません。私は上記のようにユーザーが指定した文字で始まる単語のリストを出力する必要があります。私は整数のフィルタを使用する方法を知っていますが、文字列には特にこの場合、私は開始文字でフィルタをかけなければなりません。助けてください。
追加された 著者 Sindu_,
ありがとうございました。今すぐ取得しました。単語がユーザーが指定した文字で始まるかどうか確認する必要がある場合、どのように表示されますか?そのためのキーワードはありますか?
追加された 著者 Sindu_,
ありがとう@dave、ある日、私はダブルバックティックが必要なときとそうでないときを学びます。
追加された 著者 Daniel Fischer,
@shang私が知っているのは、バックラインがインラインコードブロックを作成するために使われるマークアップです。インラインコードブロック内の中置関数アプリケーションのためにバッククイックを使用するには、2つのバッククォートを書くことでエスケープする必要があります(私はコメントの中で "foo" `startsWith` 'f' 時には明らかにそうではありません。うーん、いいえ、二重バッククォートはコメントで二重バッククォートとしても表示され、エスケープルールを間違って覚えていなければなりません。
追加された 著者 Daniel Fischer,
filter ::(a - > Bool) - > [a] - > [a] に関係なく、@ Sindu_ filter は同じ働きをします。 findWords では、リスト要素のタイプは String であるため、 filter ::(String - > Bool) - > [String] - > [String] Char 引数からフィルタ条件を作成し、次に findwords c input = filter(条件c)(単語入力)を実行する必要があります。
追加された 著者 Daniel Fischer,
いくつかの方法がありますが、通常はパターンマッチングを使用します。あなたが完全なソリューションをスプーンフィードするなら、それを学ぶことはできません。ちょっと遊んでみて、あなたの本やチュートリアルで関数を定義する方法を読んでください。パターンマッチングとガードがどのように機能するかを理解したら難しいことではありません。
追加された 著者 Daniel Fischer,
バッククォートは、この場合、関数呼び出しを適切な英語( "foo" startsWith 'f')のように読み込むために、インフィックス形式のために使用されます。 startsWith "foo" 'f' の呼び出しとまったく同じです。
追加された 著者 shang,
@ダニエルフィッシャー:ああ、そう、申し訳ありません。私の脳の部分。
追加された 著者 shang,

Haskell#1:Haskellでは String Chars のリストとして定義されているので、すべてのリスト関数を利用できます。

4
追加された

あなたは本当にあなたの投稿に従って与えられた文字列で始まる文字列を知りたいので、私は isPrefixOf 関数を使います:

filter ("p" `isPrefixOf`)  ["cats", "dogs", "poor boys"]

私が覚えている限り、この関数はData.Listにあります。

1
追加された