0

実装したキュー データ構造を処理する簡単なプログラムを作成しました。これが私のコードです

transf :: Queue -> [Char]
transf emptyQueue = []  
transf queue = [front queue] ++ transf (dequeue queue)

キューがどこにあるか

newtype Queue = Q [Char] deriving (Show)

emptyQueue :: Queue
emptyQueue = Q []

queueIsEmpty :: Queue -> Bool
queueIsEmpty (Q []) = True
queueIsEmpty (Q _) = False

enqueue :: Char -> Queue -> Queue
enqueue x (Q q) = Q (q ++ [x])

dequeue :: Queue -> Queue
dequeue (Q (_:xs)) = Q xs
dequeue (Q []) = error "dequeue: empty queue"

front :: Queue -> Char
front (Q (x:_)) = x
front (Q []) = error "front: empty queue"

私のプログラムはキューを文字列に変換しません。問題はどこだ?前もって感謝します。

4

1 に答える 1

4
transf emptyQueue = []

これemptyQueueは単にパラメータの名前です。global の内容に対するパターン マッチングではありませんemptyQueue。そのような変数に対してパターン マッチを行うことはできません。コンストラクタに対してのみです。

空のキューに一致するように記述transf (Q [])する必要がありますが、関数全体を単純に として定義できることに注意してくださいtransf (Q xs) = xs

于 2013-03-10T17:22:14.647 に答える