解析S表达式

时间:2015-01-12 03:26:45

标签: haskell s-expression

鉴于以下定义构成了Yorgey教授course S Expression

data Atom = N Integer | I Ident deriving Show

data SExpr = A Atom | Comb [SExpr] 派生秀

以下是完整数据类型(在Haskell中)应该是什么?

(bar(foo)3 5 874)

2 个答案:

答案 0 :(得分:5)

我相信它会像

Comb
    [ A (I "bar")
    , Comb
        [ A (I "foo")
        ]
    , A (N 3)
    , A (N 5)
    , A (N 874)
    ]

每当您遇到一个左括号时,您都会开始一个新的Comb表达式,因此(foo)Comb [A (I "foo")]foo只是A (I "foo")

答案 1 :(得分:5)

我假设Ident类型是一个字符串。

  • bar 作为Atom为I "bar",而SExpr为A (I "bar")
  • ditto for foo
  • (foo)是一个SExpr,构造为Comb [ A (I "foo") ]
  • 3 作为Atom是N 3,而SExpr是A (N 3)
  • 同样适用于 5 874
  • (bar(foo)3 5 874)(这是一个SExpr)的完整构造

Comb [ A (I "bar")
     , Comb [ A (I "foo") ]
     , A (N 3)
     , A (N 5)
     , A (N 874)
     ]