English 中文(简体)
Haskell recursive problem, tiny parser. 背书和让言论
原标题:Haskell recursive problem, tiny parser. Negation of Expr and let expressions
  • 时间:2009-10-06 09:39:32
  •  标签:
data Expr =  Var Char | Tall Int | Sum Expr Expr | Mult Expr Expr | Neg Expr | Let Expr Expr Expr
    deriving(Eq, Show) 

parseExpr :: String -> (Expr, String)

parseExpr ( * : ( :s) = (Mult x y, s  )
    where (x, , :s ) = parseExpr s
          (y, ) :s  ) = parseExpr s 
parseExpr ( + : ( :s) = (Sum x y, s  )
    where (x, , :s ) = parseExpr s
          (y, ) :s  ) = parseExpr s 
parseExpr (x : xs) | isDigit x = (Tall (digitToInt x), xs)
parseExpr (x:s) = (Var x,s) 
    where   x >=  A  = True
        x <=  Z  = True 

我的教区在完成之前没有两件事。 从数据类型上看,它缺乏“从业”和“从业经验”。 第一部分就是这样:

parseExpr( -  
parseExpr( l : e : t :x: b : e 

As in the datatype, the Let expressions starts with let and takes in three Expr. I don t know how to write out these last functions. Any help at all will be very much appreciated.

我在此问另一个关于SO问题的提问:here。 这是这一问题的关联。


例如:

parseProg "let X be 4 in let Y be *(2 , X) in let Z be +(Y , X) in
+(+(X , Y) , Z)"
Let (Var  X ) (Tall 4) (Let (Var  Y ) (Mult (Tall 2) (Var  X )) (Let
(Var  Z ) (Sum (Var  Y ) (Var  X )) (Sum (Sum (Var  X ) (Var  Y )) (Var
 Z ))))
最佳回答

表达这些内容的基本战略与其他行动一样,只是你不得不压制两种次抑郁,但一种或三种。 www.un.org/Depts/DGACM/index_spanish.htm 它希望:

parseExpr ( l : e : t :s) = (Let x y z, s3)
    where (x,  b : e :s1) = parseExpr s
          (y,  i : n :s2) = parseExpr s1
          (z, s3)         = parseExpr s2

如打字开始使用<代码>l,e ,t。 (s)并试图从中删除一个表述。 由此产生了一种表述(x)和另一种表述。 我们期望,剩下的缩略语始于b,e。 由于这之后应再作一句话,我们再把这一条令的其余部分(s<2>/code>)划为平整另一种表述。 因此。

唯一的问题是,我们不考虑可能将这些关键词,如“删除”和“be”与周围表述分开的空间。 容易的解决办法是在这些关键词之前或之后需要一个空间,并改变主角的模式,以明确包括这些空间,例如:

    where (x,    : b : e :   :s1) = parseExpr s

• 更灵活的做法是增加<条码>空间。 String -> String , 职能取消主要空间,并在适当地点发出。

问题回答

暂无回答




相关问题
热门标签