2016-12-07 10 views
1

文章の中で特定の単語を数えることができるような関数を書くようになりましたが、今はリスト内の単語の長さを数える必要があります。だから私は各要素が単語であり、この単語の文字を数えたいと思うリストを持っています。 ハスケルはループを使用していないので、私はそれを行うための解決策を見つけることができませんでした。これを行うためにとにかくありますか?Haskellのリスト内の単語の長さを取得する

+0

は、あなたが持っているショーのコードによって、より良い、この質問をしたことができますすでに完了しました。また、haskellの質問では、あなたの欲求の出力のタイプシグネチャを含めるのに役立ちます。 – wizzup

答えて

2

ハスケルで作業するときにループが必要だと思うなら、おそらく再帰を探しているでしょう。文字列のリストを再帰し、それぞれにlength関数を適用したいと思うでしょう。関数は(あなたがHaskellのを介して動作として非常に精通になるでしょう)の各値に適用されるリストを再帰の一般的なパターンは、おおよそ次のようになります。

func f []  = [] 
func f (x:xs) = f x : func f xs 

だから我々はその問題を解決できます方法(機能を特化した、というよりも、それを引数として受け入れることは):この動作は非常に一般的ですので、

wordLengths :: [String] -> [Int] 
wordLengths []  = [] 
wordLengths (x:xs) = length x : wordLengths xs 

しかし、私たちのためにこのすべての世話をする機能mapが存在します。その型シグネチャは(a -> b) -> [a] -> [b]なので、関数(length)と物のリスト(Strings)を渡すことがわかっています。私たちは、文字列のリスト内の各値にlength機能をmap場合、我々はあなたの望ましい結果を得るでしょう:

wordLengths :: [String] -> [Int] 
wordLengths = map length 

使用例:

ghci>> wordLengths ["abc","defg"] 
[3,4] 
+0

まず、非常に良い説明に感謝します!しかし、それを使用しようとしている間、私は 'variable in scope:wordLengths :: [String] - > [Int]' –

+0

というエラーだけを得るでしょう。これを 'ghci'に直接入力しようとしていると思いますか?私がインクルードした関数定義は、Haskellのソースファイルに書かれています。拡張子 '.hs'をつけてファイルに貼り付け、端末の' ghci fileName.hs'で読み込むことができます。 – mnoronha

+0

それは私がやったことだと思います。私は* .hsファイルを書いてこれに加えました。だから私はHaskell自身のソースファイルを "変更"しなければならないのですか? HA.hsファイル全体を追加しました。 –

関連する問題