我需要用以下字母命名图中的节点。 当我创建一个新节点(按需)时,我只需要从字符集中选取第一个未使用的字母。
在 F# 中实现此类结构/计算的最佳方法是什么?。 请注意,以下信件应按需领取。
假设我有这样的不定式字母集合(这是重复的字符集合,但让我们忽略它):
let alphabet =
Seq.initInfinite (fun index ->
let alphabet' = "abcdefghijklmnoperstuvxwz"
alphabet'.Chars(index % alphabet'.Length)
)
我对以下语义特别感兴趣:
alphabet.next()//生成 'a' ...某个时候... Alphabet.next()//产生 'b' ...某个时候... Alphabet.next()//产生 'c' 等等
我一直在考虑序列、惰性列表和异步序列,但据我所知,它不能满足我的需求。我不想也使用像 Rx 等复杂的库
我怀疑可以用惰性函数、状态单子(monad)或类似的东西很好地完成它,但不知道如何以功能性方式将各个部分连接在一起
最佳答案
序列可以引用自身,那么这个怎么样?
let alphabet =
let alphabet' = "abcdefghijklmnoperstuvxwz"
let rec loop() = seq {
yield! alphabet'
yield! loop()
}
loop()
alphabet |> Seq.take 100 |> Seq.toList
关于f# - 如何实现不定式数据结构以在 F# 中按需获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862403/