4

短所の逆であるSnocリストを作成する必要があります。1つの要素を前方に追加しましたが、2つのリストを連結する方法がわかりません。それが今の状況です:

module Tsil where

data Tsil a = Lin
            | Snoc (Tsil a, a)
            deriving (Eq, Ord, Show, Read)


empty :: Tsil a
empty = Lin

infixr 2 |: 
(|:) :: a -> Tsil a -> Tsil a
(|:) a t = Snoc (t, a)

infixr 5 |++
(|++) :: Tsil a -> Tsil a -> Tsil a 
(|++) a Lin = a
(|++) Lin a = a
4

2 に答える 2

2
(|++) l (Snoc (t,x)) = Snoc (l |++ t,x)
于 2012-10-23T17:40:38.053 に答える
1

あなたのリストタイプはHaskellのものと同じなので、それをHaskellリストにして、連結し、元に戻します。Haskellでの再利用性に感謝します;-)

toList Lin = []
toList (Snoc (xs, x)) = x : toList xs

toTsil [] = Lin
toTsil (x:xs) = Snoc (toTsil xs, x)

a (|++) b = toTsil $ toList a ++ toList b
于 2012-10-23T21:49:34.500 に答える