あなたが言及した本は読んだことがありませんが、知っていることを説明しようと思います。
tail
リストの最初の要素を除くすべてを返す関数については正しいです。zip
仕組みを見てみましょう。
zip [1, 2, 3, 4] [5, 6, 7, 8]
与える、
[(1, 5), (2, 6), (3, 7), (4, 8)]
ここで、入力から必要な出力を考え、入力から出力への必要な変換を観察します。
[1, 2, 3, 4] -> [(1,2),(2,3),(3,4)]
上記の の適用から、zip
必要な出力は次のように呼び出すことで取得できることがわかりますzip
。
zip [1, 2, 3] [2, 3, 4]
ここで、functionのドキュメントzip
から、指定された 2 つのリストの長さが等しくない場合、長い方のリストの余分な項目が破棄されることがわかります。したがって、同じ結果が得られます。
zip [1, 2, 3, 4] [2, 3, 4]
最初の入力リストの最後の4
ものが破棄され、必要な結果が得られます。
これは、次のように関数で記述できます。
pairs xs = zip xs (tail xs)
他に何かご不明な点がございましたら、お気軽にお問い合わせください。