是否有F :: * -> *
,iterate' :: Ord a => (a -> a) -> a -> F a
和elem' :: Ord a => Int -> a -> F a -> Bool
具有以下屬性?數據結構請求:懶惰無限集
elem x (take n (iterate f y))
⇒elem' n x (iterate' f y)
⇒elem x (iterate f y)
elem' n x (iterate' f y)
運行在O(n * log n)
時間和空間O(n)
elem' n x xs
運行在O(log n)
時間和空間O(1)
條件(3)看起來比條件(2)強得多,因爲我們可以選擇'xs = iterate'f y'。爲滿足條件(3),爲什麼需要條件(2)?或者:你實際上*作爲你的條件而不是條件(3)意味着什麼? –
屬性中的自由變量不會佔用任何額外的時間或空間。 'iterate'f y'是「允許」需要什麼(2)的狀態,但是如果你從未對結果應用'elem''則不必評估那麼遠。 – Gurkenglas
當然,這是一個非常明智的立場。理解並感謝您的答案。 –