gpt4 book ai didi

list - 是否可以与 F# 中的分解序列匹配?

转载 作者:行者123 更新时间:2023-12-03 14:39:02 24 4
gpt4 key购买 nike

我似乎记得旧版本的 F# 在匹配序列时允许结构分解,就像列表一样。有没有办法在保持序列惰性的同时使用列表语法?我希望避免大量调用 Seq.head 和 Seq.skip 1。

我希望有类似的东西:

let decomposable (xs:seq<'a>) =
match xs with
| h :: t -> true
| _ -> false
seq{ 1..100 } |> decomposable

但这仅处理列表并在使用序列时给出类型错误。使用 List.of_seq 时,它似乎评估了序列中的所有元素,即使它是无限的。

最佳答案

Seq 在事件模式中运行良好!除非我在这里做一些可怕的事情......

let (|SeqEmpty|SeqCons|) (xs: 'a seq) = 
if Seq.isEmpty xs then SeqEmpty
else SeqCons(Seq.head xs, Seq.skip 1 xs)

// Stupid example usage
let a = [1; 2; 3]

let f = function
| SeqEmpty -> 0
| SeqCons(x, rest) -> x

let result = f a

关于list - 是否可以与 F# 中的分解序列匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com