我需要写一个函数par :: String -> Bool
来验证一个给定的带括号的字符串是否匹配堆栈模块。
例如:
par "(((()[()])))" = True
par "((]())" = False
下面是我的stack模块实现:
module Stack (Stack,
push, pop, top,
empty, isEmpty)
where
data Stack a = Stk [a]
deriving (Show)
push :: a -> Stack a -> Stack a
push x (Stk xs) = Stk (x:xs)
pop :: Stack a -> Stack a
pop (Stk (_:xs)) = Stk xs
pop _ = error "Stack.pop: empty stack"
top :: Stack a -> a
top (Stk (x:_)) = x
top _ = error "Stack.top: empty stack"
empty :: Stack a
empty = Stk []
isEmpty :: Stack a -> Bool
isEmpty (Stk [])= True
isEmpty (Stk _) = False
因此,我需要实现一个par
函数,它将测试一个括号字符串,并判断其中的括号是否平衡。我怎么能用一个堆栈来实现这一点呢?
7条答案
按热度按时间eivnm1vs1#
8fsztsew2#
答案如下:
nimxete23#
3j86kqsm4#
我是一个 haskell 新手。这是我的尝试,绝对不优雅,但想尝试不同的方法
zpjtge225#
dgjrabp26#
xxls0lw87#
我的尝试,只是使用一个列表作为一个堆栈,并重新循环沿着输入。忽略非括号字符。
输出: