2017-10-31 17 views
0

文字列の最初の単語の長さで文字列のリストをソートしようとしています(文字列に複数の単語がある場合)文字列。これは私が持っているコードですが、私にエラーを与えています。誰か助けてくれますか?最初の単語の長さで文字列のリストを並べ替える

listStrings :: [String] -> [(String, Int)] 
listStrings = map (\ws -> (head ws , length ws)). group.sort.words 
+0

'words'は'文字列型を持つ必要があります - > [文字列] 'が、あなたをそれを '[String]'に適用してみてください。 – freestyle

+0

2番目の関数 'listStrings'は' [String] - > [(String、Int)] '型ですが、あなたの質問から型は' [String] - > [String] 'でなければなりません。だからあなたは何をしたいのですか? – freestyle

答えて

1

ちょうどそれがここでの最初の言葉

import Data.List 

listStrings :: [String] -> [String] 
listStrings = reverse . sortBy sortF 
    where 
     sortF :: String -> String -> Ordering 
     sortF = comparing (length . head . words) 

のレンスを比較しますあなたはlive example

+0

'data.Function'の' on'を 'length'を繰り返すのではなく、使うことができます。頭 。単語は2回。 – gallais

+1

または 'sortF =(length。head。words)'を比較しています。それでも、比較するたびにその長さを再計算するのは少し非効率です。また、空の文字列を処理すると、現在は 'head'クラッシュが発生しています。 – chi

+0

@gallais、 'on'についてよく分かりませんでした – Netwave

関連する問題