私はまだHaskellとFunctional Programmingの仕組みを理解しようとしています。私の機能がうまくいかない理由を理解するのに役立つ必要があります。私は、整数のリストをパラメータとして取り、最初のリストから3の倍数を含むサブリストをフィルタリング/返す関数を作成しようとしています。ここに私のコードは次のとおりです。Haskell Filterリストからサブリストへの3の倍数
module Main where
sublist = []
myFunc :: [Int] -> [Int]
myFunc [] = []
myFunc [t] = do
if t `mod` 3 == 0
then t : sublist
else myFunc []
myFunc (h:t) = do
if h `mod` 3 /= 0
then myFunc t
else do
h : sublist
myFunc t
これは[] =のみの関数に渡された最後の値を含むリストを返し、まだサブリスト。あなたが私に事前に与えることができる任意のアドバイスありがとう。
あなたのコードは、不変性の原則を理解していないようです。ステートメント 't:sublist'はサブリストを全く変更しません。単に' t'を含むリストを生成します(サブリストは常に空であるため、不変性が働く - バインディングは変わりません)。 –
ここには 'do'は必要ありません。モナドについて学ぶまでは 'do'を使わないでください。 (おそらく、あなたはモナドを使う前に 'IO'で' do'表記を使うことで逃げることができます。) – PyRulez
このコードがなぜコンパイルされるのかを解説し、コンパイルしたらなぜそれが動作するのか中間レベルのHaskellプログラマーのための素敵なエクササイズです。 = D –