将表达式转换为字符串表示形式? [英] convert an expression to a string representation?

查看:110
本文介绍了将表达式转换为字符串表示形式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑下面的Haskell代码:

 模块Expr其中

- 变量以字符串,假定为标识符:

类型变量=字符串

- 表达式的表达式:

data Expr = Const整数
| Var变量
| Plus Expr Expr
|减去Expr
| Mult Expr Expr
deriving(Eq,Show)


simplified :: Expr-> Expr

simpl(Mult(Const 0) (常量0)(变量x))
=常量0
简化(Mult(Varx)(Const 0))
=常量0
x))
= Varx
simplified(Plus(Varx)(Const 0))
= Varx
simplify(Mult(Const 1)(Varx))
= Varx
简化(Mult(Varx)(Const 1))
= Varx
简化(减号(Varx)(Const 0))
= Varx
simplify(Plus(Const x)(Const y))
= Const(x + y)
简化(Min(Const x)(Const y))
= Const(x - y)
* y)
简化x = x

toString :: Expr->字符串

如何将表达式转换为字符串表示形式?

例如

  toString(Varx)= x
toString(Plus(Varx)(Const 1))=x + 1
toString(Var(Varx)(Const 1))(Var y))
=(x + 1)* y


解决方案

与其调用函数toString,不如使用 Show类型班级。那么你的数据类型可以用在任何可以使用Show实例的地方。显示是标准的Haskell将东西转换为字符串的方式。

  instance显示Expr其中
show(Var x)=x
- 等


Consider the following Haskell code:

module Expr where

    -- Variables are named by strings, assumed to be identifiers:

    type Variable = String

    -- Representation of expressions:

    data Expr = Const Integer
          | Var Variable
          | Plus Expr Expr
          | Minus Expr Expr
          | Mult Expr Expr
          deriving (Eq, Show)


    simplify :: Expr->Expr

    simplify (Mult (Const 0)(Var"x"))
     = Const 0 
    simplify (Mult (Var "x") (Const 0))
     = Const 0
    simplify (Plus (Const 0) (Var "x")) 
    = Var "x"
    simplify (Plus (Var "x") (Const 0))
     = Var "x" 
    simplify (Mult (Const 1) (Var"x")) 
    = Var "x"
    simplify (Mult(Var"x") (Const 1))
     = Var "x" 
    simplify (Minus (Var"x") (Const 0))
     = Var "x"
    simplify (Plus (Const x) (Const y)) 
    = Const (x + y)
    simplify (Minus (Const x) (Const y))
    = Const (x - y)
    simplify (Mult (Const x) (Const y))
     = Const (x * y)
    simplify x = x

    toString :: Expr->String

How can I convert an expression to a string representation?

e.g.

toString (Var "x") = "x"  
toString (Plus (Var "x") (Const 1)) = "x + 1"  
toString (Mult (Plus (Var "x") (Const 1)) (Var "y"))  
       = "(x + 1) * y" 

解决方案

Rather than call your function toString, it might be preferable to use the Show type class. Then your data type can be used anywhere that an instance of Show can be used. Show is the standard Haskell way of converting "things" into strings.

instance Show Expr where
    show (Var "x") = "x"
    -- etc.

这篇关于将表达式转换为字符串表示形式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆