是否有一個簡單的Seq.unfold
版本,只是將前一個元素作爲狀態?我知道你可以很容易地適應Seq.unfold
這樣做,但結果是不太可讀。更簡單的Seq.unfold在F#
1
A
回答
3
我不認爲有一個內置函數來做到這一點。
重複使用Seq.unfold
將是很煩人的相同的模式,但你可以很容易地使用unfold
定義,只要你想,然後只用了新的功能,其行爲的函數:
module Seq =
let generate f v =
Seq.unfold (fun v -> let r = f v in Some(r, r)) v
順便說一句,如果我想實現這個模式,我可能會用一個簡單的遞歸序列表達式,這可能比使用Seq.unfold
更容易閱讀。該generate
功能可以實現這樣的:
let rec generate f v = seq {
yield v
yield! generate f (f v) }
這不同表現了一下,因爲它產生的第一個值也是如此。不知道你想要什麼行爲。
1
Tomas的回答很好,但正如你所說,使用Seq.unfold
來做這件事很醜陋,正如他所說,他的generate
函數的行爲有所不同。
如果你想相同的行爲Seq.unfold
,它使用以前的元素狀態,這應該這樣做:
let rec unfold f state =
seq {
match f state with
| Some x ->
yield x
yield! unfold f x
| None ->()
}
相關問題
- 1. 在F#中,如何在更大的管道環境中使用Seq.unfold?
- 2. insertAt in F#更簡單和/或更好
- 3. 簡單類型測試在F#
- 4. F# - 把簡單的for循環到更多的功能結構
- 5. F中非常簡單的循環#
- 6. F#隱式類型簡單的遞歸
- 7. 兩個簡單的F#問題
- 8. 如何更簡單地表達lisp(lambda(pair)(apply#'f pair))?
- 9. F#簡單類型和結構比較
- 10. 簡化表達F#
- 11. F#WPF - 在Viewport3D中顯示一個簡單的對象
- 12. AngularJS $手錶:更簡單或更簡單的手錶?
- 13. F#:在F#換單元素數組
- 14. 簡單的更新在SQLAlchemy的
- 15. SQL更新(簡單?)
- 16. 更簡單的測距儀?
- 17. 更簡單的groupStartBy函數?
- 18. 簡單的更新幫助
- 19. 更簡單的方法呢?
- 20. 簡單的更新MySQL表
- 21. ROW_NUMBER()在分區 - 更簡單的方法
- 22. 簡化F#記錄分配
- 23. 爲什麼我感覺我的F#代碼可以更簡潔
- 24. 有沒有簡單的方法來使用F#可變結構
- 25. 使用F#進行簡單的.NET Web開發#
- 26. F#的簡單包裝做矩陣運算
- 27. 最簡單的Visual Studio,支持C#和F#
- 28. 更簡單的DIV/JavaScript更新?
- 29. 更快/更簡單的黑莓編程?
- 30. 爲什麼isequaln(f,簡化(f))是錯誤的?