私は特に関数型プログラミングと Haskell が初めてで、as-pattern とそれを使用することによる重複の削減について 2 つの質問があります。次のコード例を示します。
last1 :: [a] -> a
last1 [x] = x
last1 (x:xs) = last xs
last2 :: [a] -> a
last2 [y] = y
last2 (y:ys@(_:_)) = last ys
last1と比較して重ならないようにする必要がありますlast2。特定の String を見てみましょうf:[]。[x]とに一致し(x:xs)ますlast1。
にlast2一致し[y]ます。ただし(y:ys@(_:_))、ys一致する(_:_)必要があり、最初の任意のパターンを[].
私の仮定は正しいですか?
次に、特定の String を見てみましょうf:o:o:[]。これでパターンが(y:ys@(_:_))一致しました。この場合、バインディングがどのように機能するのか興味があります。ys最初の呼び出しの後は何ですか? だと思いo:o:[]ます。