1

鉴于以下定义构成了Yorgey 教授课程中的S 表达式

data Atom = N Integer | I Ident deriving Show

data SExpr = A Atom | Comb [SExpr] 衍生节目

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

(酒吧(富)3 5 874)

4

2 回答 2

6

我相信它会像

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

每当遇到左括号时,您都会开始一个新的Comb表达式,while (foo)is simple 也是如此。Comb [A (I "foo")]fooA (I "foo")

于 2015-01-12T03:43:53.913 回答
5

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

  • bar作为 Atom 是I "bar",作为一个 SExpr 是A (I "bar")
  • 同上foo
  • (foo)是一个 SEpr 并且被构造为Comb [ A (I "foo") ]
  • 3作为 AtomN 3和作为 SExpr 是A (N 3)
  • 5874同上
  • (bar (foo) 3 5 874)(这是一个 SEpr) 的完整结构是

.

Comb [ A (I "bar")
     , Comb [ A (I "foo") ]
     , A (N 3)
     , A (N 5)
     , A (N 874)
     ]
于 2015-01-12T03:44:44.153 回答