我找到了一个很棒的 haskell 解决方案(源代码)来生成Hofstadter 序列:
hofstadter = unfoldr (\(r:s:ss) -> Just (r, r+s:delete (r+s) ss)) [1..]
现在,我也在尝试用 F# 编写这样的解决方案。不幸的是(我对 F# 不是很熟悉)到目前为止我还没有成功。
我的问题是,当我sequence
在 F# 中使用 a 时,似乎无法删除元素(就像在 haskell 解决方案中所做的那样)。
其他数据结构,如arrays
, list
orset
允许删除元素不会生成无限序列,而是仅对某些元素进行操作。
所以我的问题是:在 F# 中是否有可能生成一个无限序列,其中元素被删除?
到目前为止我尝试过的一些东西:
无限的数字序列:
let infinite =
Seq.unfold( fun state -> Some( state, state + 1) ) 1
Hofstadter 序列 - 不工作,因为没有del
关键字并且有更多语法错误
let hofstadter =
Seq.unfold( fun (r :: s :: ss) -> Some( r, r+s, del (r+s) ss)) infinite
我考虑过使用Seq.filter
,但也没有找到解决方案。