【发布时间】:2013-03-11 15:41:41
【问题描述】:
我在 Haskell 中有一个 10 元组的列表,我想从该元组列表中获取第 n 个元组。但正如我所见,只有 length 函数适用于该列表。 head、tail 或 !! 功能不起作用。你能告诉我我该怎么做吗?元组由整数和字符串组成。 例如当我尝试这个时:
tail [(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8")]
我从拥抱中收到此错误消息:
ERROR - Cannot find "show" function for:
*** Expression : tail [(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8")]
*** Of type : [(Integer,Integer,[Char],[Char],[Char],[Char],[Char],[Char],[Char],[Char])]
【问题讨论】:
-
您的示例非常适合我,并提供
[(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8")]。但是,与这些巨型元组相比,使用结构仍然会更好。 -
你用的是什么解释器?对我来说,它看起来像拥抱......自 6.12.2 版(2010 年发布)以来,GHCi 至少支持多达 60 个组件的元组(包括显示实例,这是这里的问题)。
-
谢谢你警告我。我正在使用拥抱。在阅读了你所说的之后,我看到它适用于 ghci,但它不适用于拥抱。我应该怎么做才能让它也适用于拥抱?你有什么想法吗?
-
为具有超过 7 个 (IIRC) 组件的元组编写您自己的
Show实例。但是最后一次发布的拥抱是从 2006 年秋季开始的,所以拥抱几乎已经死了。可悲,但这就是生活。转移到 ghci,它带有一个编译器以获得额外的好处。 -
instance (Show a, Show b,...) => Show (a,b,...) where show (x,y,...) = "(" ++ show x ++ "," ++ show y ++ ... ++ ")"。初级,但很乏味。当然,您可以自动生成实例。