【发布时间】:2015-04-13 14:11:57
【问题描述】:
我有一个函数
(.#.) :: [a] -> Integer -> a -- 1-indexing with 'Integer'
xs .#. j = xs !! (fromIntegral $ j-1)
showIntegers :: [Integer] -> String
showIntegers r = let
str = concat $ "List: " : [r (.#.) j | j <- [1..length r]]
如何将r (.#.) j 显示为Char/String 而不是整数?我尝试使用show,但它给了我一个错误。
这是我如何使用show的示例:
str = concat $ "List: " : [show $ r (.#.) j | j <- [1..length r]]
输入输出示例:
> showIntegers [1,2,3]
List: 1 2 3
【问题讨论】:
-
1.你是如何使用
show并得到错误的? 2. 举一个你想要的showIntegers [1,2,3]字符串的例子 -
添加到问题中
-
什么错误?
*** Exception: Prelude.(!!): index too large有机会吗?列表是零索引的,所以你可能想要[0..length r - 1]。 -
@MichalSeweryn:这会将列表转换为字符串,然后获取结果字符串的索引。也可以使用`来表示一个代码段。
-
在 Haskell 中使用
r !! i访问列表的元素是最后的手段,因为它效率很低(列表不是数组)。在[1 .. length r]上使用列表推导是一种常见的反模式。不要写[f (r !! i) | i <-[0..length r-1]],改用[f x | x<-r]或map f r。
标签: haskell