【发布时间】:2011-05-21 09:58:41
【问题描述】:
我正在阅读《Haskell 编程》,第 8 章,作者给出了一个编写解析器的例子。
完整来源在这里:http://www.cs.nott.ac.uk/~gmh/Parsing.lhs
我无法理解以下部分:many 允许p 的零个或多个应用程序,
而many1 至少需要一个成功的申请:
many :: Parser a → Parser [a ]
many p = many1 p +++ return [ ]
many1 :: Parser a → Parser [a ]
many1 p = do v ← p
vs ← many p
return (v : vs)
递归调用如何发生在
vs <- many p
vs是many p的结果值,但是很多p叫做many1 p,所有many1在其定义中都是do符号,又是结果值v和vs,递归调用什么时候返回?
为什么下面的sn-p可以返回[("123","abc")]?
> parse (many digit) "123abc"
[("123", "abc")]
【问题讨论】:
标签: haskell recursion mutual-recursion