我目前正在Haskell中學習CS課程,並且在理解一些材料時遇到了一些嚴重問題。Haskell列表(時間複雜性?Haskell數據類型?) - 作業相關
對於我的任務之一,我給了2個數據類型,並要求我編寫一個追加函數,它具有不變的時間追加。
我給出:
data NNList a = Sing a | Append (NNList a) (NNList a) deriving (Eq)
data CList a = Nil | NotNil (NNList a) deriving (Eq)
,我要求寫一個函數:
CListAppend :: CList a -> CList a -> CList a
我不知道我錯過了我的CS教育,但我經常發現自己與時間和空間的複雜性相混淆,我怎麼會知道一個函數是否爲constant time
?任何人都可以提供一些關於如何處理這個問題的想法嗎?
我嘗試:
CListAppend :: CList a -> CList a -> CList a
CListAppend Nil rl = rl
CListAppend ll Nil = ll
CListAppend ll rl = NotNil $ Append ll rl
該報告並返回,而不是欄列表NNList的錯誤。無論如何要轉換嗎?
您不希望在您的功能中執行的工作在輸入大小方面發生顯着變化。在你的情況下,你可能不希望在一個恆定時間的解決方案中使用遞歸。 – copumpkin 2013-03-26 01:54:29
提示:你必須返回一個'CList'。 「CList」的構造函數是什麼? – hammar 2013-03-26 02:11:38
@hammar,我怎樣才能在Haskell中構建一些東西?它肯定不是'CList $ Append ll rl'或類似的東西.. – rlhh 2013-03-26 02:14:56