[Haskell] productWith листов
От: Haskell.Curry  
Дата: 16.10.09 12:44
Оценка:
Нужное что-то вроде productWith листов, вот имплементация

apply :: [(C, C, C)] -> [(S, S, S)] -> [(CS, CS, CS)]
apply [] _ = []
apply _ [] = []
apply (x:xs) ys = apply' x ys ++ apply xs ys
   where
   apply' x@(x1, x2, x3) ((y1, y2, y3):ys) = (CS x1 y1, CS x2 y2, CS x3 y3) : apply' x ys
   apply' _ _ = []


Думаю, здесь нужно что-то вроде Applicative, чтобы сделать это элегантнее?
Re: [Haskell] productWith листов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.10.09 12:46
Оценка: 2 (1)
Здравствуйте, Haskell.Curry, Вы писали:

HC>Думаю, здесь нужно что-то вроде Applicative, чтобы сделать это элегантнее?


liftA2?
Re[2]: [Haskell] productWith листов
От: Haskell.Curry  
Дата: 16.10.09 13:01
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Haskell.Curry, Вы писали:


HC>>Думаю, здесь нужно что-то вроде Applicative, чтобы сделать это элегантнее?


N>liftA2?


Спасибо, так и чувствовал, как раз после прочитки typeclassopedia
apply = liftA2 (\ (c1, c2, c3) (s1, s2, s3) -> (CS c1 s1, CS c2 s2, CS c3 s3) )
Re[3]: [Haskell] productWith листов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.10.09 14:05
Оценка: 61 (2)
Здравствуйте, Haskell.Curry, Вы писали:
HC>Спасибо, так и чувствовал, как раз после прочитки typeclassopedia

Может быть, где-то удобнее окажутся list comprehensions:
[x*y | x <- [1,2,3], y <- [4,5,6]]


В GHC есть ещё всякие полезные расширения для них.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.