2016-04-08 17 views
-6

Haskell'e yeni tanıştım ve type Img = [String] olarak gösterilen görüntülerle çalışıyorum. Resmi, sağa veya sola kaydırmalı 1 veya daha fazla satır ile taşımak istiyorum. Aşağıda ben yukarı veya aşağı görüntüleri taşımak manged ettikHaskell: yatay çizgi üzerinde hareketli görüntü

, kod:

moveVer :: Int -> Img -> Img 
moveVer n xs = take len $ drop (mod n len) $ cycle xs 
     where len = length xs 

img 1 = XXXXXX  OUTPUT = (moveVer (3)(img 1)) = XX 
      XX           XX 
      XX          XXXXXX 
      XX          XXXXXX 
     XXXXXX          XX 

Şimdi ben aynı şeyi yapmak ancak (sol veya sağ) Görüntüyü yatay hareket etmeye çalışıyorum. String da karakterlerin bir listesidir beri tanımlanan moveHor :: Int -> Img -> Img

+6

Hayır, hiçbir şeyi "yönetmediniz" - kelimenin tam anlamıyla önceki sorgunun yanıtından kopyalayıp yapıştırın. Belki de aslında yaptığınız şey daha iyi bir uzun vadeli yatırımdır. –

cevap

1

temel algoritmaya fonksiyonu, [Char] dikey kaydırma fonksiyonu ile aynıdır. Eğer move açısından sizin moveVer fonksiyonunu yazabiliriz Şimdi

move :: Int -> [a] -> [a] 
move n xs = take len $ drop (mod n len) $ cycle xs 
    where len = length xs 

:

Sen moveVer için kod beri move fonksiyonu için algoritma genelleme yapabiliriz

gerçekten sadece bir liste gerektirir ve Img üzerinde hiçbir bağımlılığı

moveVer :: Int -> Img -> Img 
moveVer = move 

Ve bir dize yalnızca bir Karakter listesi olduğundan, dizelerin listesi üzerinde eşleştirip move yatay hareketinizi yapmak için işlev.

moveHor :: Int -> Img -> Img 
moveHor n = map $ move n 
İlgili konular