Hofstadterシーケンスを生成するための素晴らしいhaskellソリューション(ソース)を見つけました:
hofstadter = unfoldr (\(r:s:ss) -> Just (r, r+s:delete (r+s) ss)) [1..]
今、私もそのようなソリューションをF#で書き込もうとしています。残念ながら(私はF#にあまり詳しくありません)これまでのところ成功していません。
私の問題は、sequence
F#でaを使用すると、要素を削除できないように見えることです(haskellソリューションで行われているように)。
のような他のデータ構造arrays
、list
またはset
要素の削除を可能にするデータ構造は、無限のシーケンスを生成していませんが、特定の要素に対してのみ動作します。
だから私の質問: 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
ましたが、解決策も見つかりませんでした。