我目前正在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