On 01/12/2006, at 12:47 PM, Huazhi (Hank) Gong wrote:
Like given a string list s="This is the string I want to test", I
want to get
the substring. In ruby or other language, it's simple like s
[2..10], but how
to do it in Haskell?
If your indices are in ascending order, and unique, then something
like this might
do the trick:
els1 indexes list
= els' (zip [0..] list) indexes
where
els' [] _ = []
els' _ [] = []
els' ((j,x):xs) indexes@(i:is)
| i == j = x : els' xs is
| otherwise = els' xs indexes
Of course this is a right fold, so you ought to be able to use foldr.
Here's an attempt:
els2 indexes list
= foldr comb undefined [0..] list indexes
where
comb _ _ [] _ = []
comb _ _ _ [] = []
comb j rec (x:xs) indexes@(i:is)
| j == i = x : rec xs is
| otherwise = rec xs indexes
Bonus marks for figuring out why I used "undefined".
Warning: this is largely untested code.
Cheers,
Bernie.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe