2017-10-31 10 views
-3

私はmodを適用したい整数のリストを生成する関数を持っているので、リストの要素が25より大きいものはありません。例えば、リスト[ 6,8,18,28,14,25]は[6,8,18,2,14,25]として返されます。これまでのコードは以下の通りです。Haskellのリストのすべての要素にmodを適用する方法

このコードは、almostVigによって生成されたリストのすべての要素にmodを適用できません。私はadjustのzipWithをlet adjust m = zipWith (mod (almostVig m) 26)として使ってみましたが、それも失敗しました。リスト内のすべての要素にmodを適用して、要素が25を超えない新しいリストを作成するにはどうすればよいですか?

+2

'(Char、Int)..(Char、Int)とは何ですか? '[Int] [Int]はどうでしょうか?署名を追加することに感謝しますが、これらは意味をなさない。 typechecks実際のHaskellモジュールを記述してください。そして、質問に関係のないものを追加しないでください。 – leftaroundabout

+0

申し訳ありませんが、私はこれを初めて使い、独学です。それは私の最高の推測でした。 –

答えて

5

あなたはmapを使用することができます。

let adjust m = map (`mod` 26) (almostVig m) 

map(a -> b) -> [a] -> [b]型を持つ:それは機能を取り、要素ごとのリストにそれを適用します。

`mod` 26は部分関数のアプリケーションである:それはインラインで使用できるように128 `mod` 26代わりにmod 128 26ように、オペレータ`mod`に機能modをオンし、その後、部分的に二番目の引数を適用します。

+0

演算子セクションについて説明する価値があります。 – leftaroundabout

+0

ありがとうございました!マップを使ってみましたが、 'm = map mod(almostVig m)26'に調整してみました。 –

+0

@LillianWangler 'map'は3つではなく2つのパラメータしか取らないので、あなたがそれを書いたときにうまくいかなかったのです。 – 4castle

2

リストの理解を使用します。

[x `mod` 26 | x <- almostVig] 

この結果、すべての要素が26未満になる新しいリストが作成されます。

関連する問題