haskell - 在 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
没有错误,但输出不同
解决方案
推荐阅读
- python - 同一棵树 | leetcode错误复杂度分析解决方案
- laravel-5 - 在 ubuntu 16 上运行作曲家时出现 Permission denied 错误
- javascript - 引导模态不关闭角度js
- json - JSON 数据未显示在 Ionic HTML 文件中
- lua - Tarantool 预读限制已达到警告
- android - 我在通过 cordova build 构建 android 时遇到问题
- node.js - 无法访问对象内部的数据
- c# - 更新 DataGrid 中的行后 SaveChanges() 引发异常 [C#][WPF]
- tensorflow-lite - 如何通过谷歌对 USB Accelerator 珊瑚 beta 进行基准测试?
- r - 用 NA 替换一行数据框中的第一个重复数据