3
在F#如果试图向拉链不同长度的两个列表一个得到一个错误:为什么我不能压缩两个不同长度的列表?
List.zip [1..4] [1..3]
// System.ArgumentException: The lists had different lengths.
然而,这是很容易定义拉链的可替换定义,接受两个不同长度的自变量列表:
let rec zip' (xs: 'T list) (ys: 'T list) =
match (xs, ys) with
| ([], _) -> []
| (_, []) -> []
| ((z::zs), (w::ws)) -> (z, w) :: zip' zs ws
zip' [1..4] [1..3]
// val it : (int * int) list = [(1, 1); (2, 2); (3, 3)]
有没有很好的理由不使用这个替代定义?为什么不首先采用?
如果我们根据它们的行为为库函数赋予不同的名字,我们还需要为'exist2','forall2','iter2','map2' – kaefer