我似乎记得F#的旧版本允许在匹配序列时进行结构分解,就像列表一样.有没有办法在保持序列延迟的同时使用列表语法?我希望避免大量调用Seq.head和Seq.skip 1.
我希望有类似的东西:
let decomposable (xs:seq<'a>) =
match xs with
| h :: t -> true
| _ -> false
seq{ 1..100 } |> decomposable
Run Code Online (Sandbox Code Playgroud)
但这仅处理列表并在使用序列时给出类型错误.当使用List.of_seq时,它似乎会评估序列中的所有元素,即使它是无限的.
基本上有这个:
[
[1;2;3];
[4;5;7];
[8;9;0];
]
Run Code Online (Sandbox Code Playgroud)
我想得到这个(垂直读/转90度):
[
[1;4;8];
[2;5;9];
[3;7;0];
]
Run Code Online (Sandbox Code Playgroud)
有谁知道在f#中这样做的简单方法?