Haskell的语法糖与Python List Slices相似吗?
例如,在Python中:
x = ['a','b','c','d']
x[1:3]
提供从索引1到索引2包含的字符(或不包括索引3的字符):
['b','c']
我知道Haskell有针对特定索引的(!!)
函数,但是有没有等效的“切片”或列表范围函数?
发布于 2011-01-05 04:06:50
虽然没有对列表进行分片的内置函数,但您可以使用drop
和take
轻松地自己编写一个
slice :: Int -> Int -> [a] -> [a]
slice from to xs = take (to - from + 1) (drop from xs)
应该指出的是,由于Haskell列表是单链表(而python列表是数组),这样创建的子列表将是O(to)
,而不是像python中的O(to - from)
(当然,假设整个列表实际上都得到了评估-否则Haskell的惰性会生效)。
发布于 2011-01-05 04:47:07
如果您正在尝试匹配Python“列表”(正如其他人所指出的,这不是一个列表),那么您可能希望使用具有内置slice的Haskell vector包。另外,Vector
可以是evaluated in parallel,我认为这很酷。
发布于 2011-01-05 04:04:44
没有语法糖。在需要的情况下,您可以只使用take
和drop
。
take 2 $ drop 1 $ "abcd" -- gives "bc"
https://stackoverflow.com/questions/4597820
复制相似问题