首页 > 解决方案 > 在 Haskell 中重新创建解析器函数“many”的问题

问题描述

我尝试创建一个计算器,并为解析创建了一些函数

我已经创建了一个类型type Parser a = String -> Maybe (a , String )和一个以 Char 作为参数并返回 Parser Char 的函数,如下所示:

parse1 :: Char -> Parser Char
parse1 b (a:as)
  | b == a = Just (b, as)
  | otherwise = Nothing 

我想创建一个函数,它在参数中接受一个解析器并尝试应用它零次或多次,返回一个已解析元素的列表。

many :: Parser a -> Parser [a]
> many (parse1 ' ') "    lopesbar"
Just ("    ", "lopesbar")

我已经尝试过了,但它不起作用(无限循环)

many :: Parser a -> Parser [a]
many _ [] = Nothing
many func1 s =
  case func1 s of
    Just _ -> many func1 s
    Nothing -> Nothing

我也试试这个

many :: Parser a -> Parser [a]
many func1 s = case func1 s of
    Just (f, a) -> Just ([f], a)
    Nothing -> Nothing

没有错误,但输出不同

标签: haskell

解决方案


推荐阅读