English 中文(简体)
Haskell recursive problem, tiny parser. 几个方面
原标题:Haskell recursive problem, tiny parser. A few things
  • 时间:2009-10-05 18:38:11
  •  标签:
data Expr =  Var Char | Tall Int | Sum Expr Expr | Mult Expr Expr | Neg Expr | Let Expr Expr Expr
    deriving(Eq, Show) 

这就是<代码>Expr的数据类型,我有几个问题。 I m suppose to parse expression such as *(Expr,Expr), 如数据类型定义所示。 然而,我确实在“creating”上存在一些问题:Expr。 我利用配对模式来认识不同的东西。 另有一些法典:

parseExpr :: String -> (Expr, String)
parseExpr ( * : ( :x: , :y: ) :s)   = (Mult (parseExpr [x] parseExpr [y]),s) 

这显然不可行。 <代码>parseExpr的返回类型是,将部分成形代码作为Expr<>。 该法典右侧是问题。 页: 1 在问题得到解决之前,这一职能可以自我指责。

ANOTHER 问题在于,我不知道如何使用<代码>Var Tall的配对模式。 我如何核对<代码> Var 是A-Z和之间的高位特征 Tall 是 0-9, 作为有效,Expr?

一般来说,我只能看看看一下插图中的一些部分,以了解<条码>的内容。 I m处理。

Input like: parseProg "let X be 9 in *(X , 2)" Would spit out: Let (Var  X ) (Tall 9) (Mult (Var  X ) (Tall 2)) 
最佳回答

您的<代码>parseExpr功能恢复正常,因此当然,你不能直接使用其结果来构建Expr。 我写这番话,就好像是这样。

parseExpr ( * : ( :s) = (Mult x y, s  )
    where (x, , :s ) = parseExpr s
          (y, ) :s  ) = parseExpr s 

基本想法是,由于<代码>parseExpr>将左轮.作为双对air的第二种说法,你需要在每张休养的电话中挽救这种说法,当你处理所有次压时,你必须返回任何左边。 显然,在座的错误处理,因此,如果打算成为强有力的教区,你可能想更多地考虑这一点。

Handling Var and Tall 我只是摘录了第一种特性,并且有一个<条码>。

如果你想在Haskell撰写更复杂的教区,那么你就想看Parsec图书馆,这让你书写一个教区,大体相当于你所穿语言的克文。

问题回答

暂无回答




相关问题
热门标签