Not: ([0]++)
, (0:)
ile aynıdır, bu da daha düzgün görünmesini ve bize nanosaniye veya iki tasarruf etmesini sağlar. (Nanosaniye şeyiyle dalga geçiyorum - hiçbir şey neyin nanosaniyenin daha hızlı olduğunu söyleyemez, ama yine de bu şekilde daha iyi olur.)
Önce size gereken listeleri hazırlayalım. Bir tanımı için yeterli bilgi var O
postponeLists [[1,2,3], [7,6,8], [10,20,30,40]]
= [[1,2,3], [0,7,6,8], [0,0,10,20,30,40]]
= [1,2,3] : ones that should have zero in front of them
istiyorum:
postponeLists [] = []
postponeLists (l:ls) = l : map (0:) (postponeLists ls)
Şimdi
foldl (zipWith +) [] [[1,2,3],[0,7,6,8],[0,0,0,3,4]]
söyledi fakat
foldl (zipWith (+)) [] [[1,2,3],[0,7,6,8],[0,0,0,3,4]]
ama maalesef demek, bu sanaverir 0, zipWith
, listelerden herhangi biri biter bitmez durur. Onları durmayan bir şekilde sıkıştırmanın bir yoluna ihtiyacımız var.
Çözüm 1: en uzun olanı bulmak take maxlength.(++ repeat 0)
Çözüm 2'yi kullanarak hepsini o maxlength
olun: durmuyor başka zipWith fonksiyonunu yazın.
zipWithMore :: (a -> a -> a) -> [a] -> [a] -> [a]
zipWithMore f (a:as) (b:bs) = f a b : zipWithMore f as bs
zipWithMore f [] bs = bs -- if there's more in bs, use that
zipWithMore f as [] = as -- if there's more in as, use that
Şimdi
zipWithMore (+)
ile
zipWith (+)
değiştirebilirsiniz:
Ben o sırada bitmiyor edelim en
definition of zipWith
zipWith :: (a->b->c) -> [a]->[b]->[c]
zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
zipWith _ _ _ = [] -- here's the problem - it stops as soon as any list is empty
OK bakalım 2. çözümü tercih. Yumruk hattını sana bırakacağım.
Lütfen, addLists [[1,2,3], [7,6,8], [0,3,4]] 'sonuçlarının ne olmasını istediğinizi belirtin. Sorunuzdan belli değil. – dave4420
Sorunu açıklığa kavuşturmak için düzenlediğiniz anlaşılıyor, ama korkarım hala anlamıyorum. AddLists [[1,2,3], [7,6,8], [0,3,4]] 'nin sonucu neye benzemeli? Verdiğiniz örnek, 'katlama (zipWith +) [] [[1,2,3], [0,7,6,8], [0,0,0,3,4]]' yazmaz. kontrol et ve ne yapmak istediğini anlayamıyorum. – mhwombat
Sonuçların olmasını istiyor musunuz? [1, 2 + 7, 3 + 6 + 0, 8 + 4, 4] '=' [1,9,9,12,4] '? – mhwombat