Шаблон Haskell, соответствующий первой, средней и последней секциям

Итак, я хотел сделать простую функцию реверса строки в Haskell

swapReverse :: String => String  
swapReverse [x] = [x]
swapReverse [x,y] = [y,x]
swapReverse (x:xs:l) =         -- pattern match fails here 
  let last = [l]
      middle = xs
      first = [x]
  in  last ++ swapReverse middle ++ first

Итак, есть ли способ определить структуру шаблона в Haskell, которая имеет firstи lastэлемент и все элементы в middle?

8
задан nobody 21 March 2012 в 21:10
поделиться