考虑以下Haskell代码:

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


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

例如

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

最佳答案

与其调用函数toString,不如使用Show type class。然后,可以在可以使用Show实例的任何地方使用您的数据类型。 Show是将“事物”转换为字符串的标准Haskell方法。

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

关于haskell - 将表达式转换为字符串表示形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/321822/

10-11 00:16