私は特に関数型プログラミングと 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:[]
ます。