Sayıların bir listesi verilen bir işlev yazmaya çalışıyorum, son öğeden başlayarak her 2. sayının değer olarak ikiye katlandığı bir liste döndürür. Yani, eğer liste elemanları 1.n'dir, n-inci, olduğu gibi bırakılacak, (n-1) -th değerinden iki katına çıkacak, (n-2) -th bırakılacak gibi kullanıldı Yani burada vbHaskell - liste öğelerini nasıl ters sırayla zarif bir şekilde yinelemeli?
ben onu çözdüm nasıl:
MyFunc :: [Integer] -> [Integer]
MyFunc xs = reverse (MyFuncHelper (reverse xs))
MyFuncHelper :: [Integer] -> [Integer]
MyFuncHelper [] = []
MyFuncHelper (x:[]) = [x]
MyFuncHelper (x:y:zs) = [x,y*2] ++ MyFuncHelper zs
Ve çalışır:
MyFunc [1,1,1,1] = [2,1,2,1]
MyFunc [1,1,1] = [1,2,1]
ancak, elimde olmadan daha basit olmalı düşünemiyorum listeyi tersine çevirme, işleme koyma ve tekrar tersine çevirme işlemidir. Listeyi geriye doğru itebilir miyim? Evet ise nasıl?
Sen elemanları saymak ve sonra her tek sayılı veya her çift sayılı eleman ya katına çıkarabilir. –