我目前正在 Haskell 上 CS 课程,但在理解某些材料时遇到了一些严重的问题。
对于我的一项任务,我得到了 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 而不是 CList 的错误。反正有转换吗?