F# 如何组合两个Seq(不使用Seq.append)

F# 如何组合两个Seq(不使用Seq.append),f#,F#,这是我的密码。基本上,我希望有一个seq来处理控制台按键,过滤它们,并通过seq将其中一些返回。问题在于Seq.combine方法:它不存在。我可以使用append,但这会将它们添加到键流seq的末尾,这是无限的。 我希望当按键从消息流中推出消息时,该消息可以插入按键之间 我希望我的问题是清楚的。如果不是,我应该澄清什么 是的,这个问题看起来很奇怪 编辑: 我刚刚意识到messageStream真的不起作用 我试图做的是获取所有的Console.ReadKey并通过过滤器/映射器发送它们。任何成

这是我的密码。基本上,我希望有一个seq来处理控制台按键,过滤它们,并通过seq将其中一些返回。问题在于Seq.combine方法:它不存在。我可以使用append,但这会将它们添加到键流seq的末尾,这是无限的。 我希望当按键从消息流中推出消息时,该消息可以插入按键之间

我希望我的问题是清楚的。如果不是,我应该澄清什么

是的,这个问题看起来很奇怪

编辑: 我刚刚意识到messageStream真的不起作用


我试图做的是获取所有的Console.ReadKey并通过过滤器/映射器发送它们。任何成功的东西都会被发送回,直到没有任何东西成功。

您可以编写这样一个函数,对一个值重复应用一个函数,直到它满足一个谓词(假设F#core中不存在此函数):

然后,使用此函数进行映射,如下所示:

let rec applyUntil pred f x = if pred x then x else applyUntil pred f (f x)
在您的情况下,您可以执行以下操作:

let mapUntil pred f = Seq.map (applyUntil pred f)

这将对序列的每个元素重复应用
transformer
,直到它匹配
filter
。从你的问题中我可以看出,这就是你想要做的。

问题不太清楚;您要查找的
Seq
函数的具体行为是什么?例如,如果您有两个序列
seq[1;2;3]
seq[4;5;6]
函数将返回什么?@Quackmatic edited。希望这能把我真正的问题弄清楚。那么一个函数会对序列中的每个元素重复应用一个函数,直到它们匹配某个谓词吗?@Quackmatic是的,我猜。我想我能弄明白,但如果你给出答案,我会接受的。所有这些看起来真的很像你对观测值和Rx所做的-你有没有研究过这些?
let mapUntil pred f = Seq.map (applyUntil pred f)
mapUntil filterer transformer keyStream