解析 S 表达式
Parsing S Expression
给定以下构成 S 表达式 的定义,来自 Yorgey 教授的 course:
data Atom = N Integer | I Ident deriving Show
和
data SExpr = A Atom | Comb [SExpr]
导出显示
以下的完整数据类型(在 Haskell 中)应该是什么?
(bar (foo) 3 5 874)
我相信它会是这样的
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")
。
我假设 Ident 类型是字符串。
- bar 作为 Atom 是
I "bar"
,作为 SExpr 是 A (I "bar")
- 同上 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)
]
给定以下构成 S 表达式 的定义,来自 Yorgey 教授的 course:
data Atom = N Integer | I Ident deriving Show
和
data SExpr = A Atom | Comb [SExpr]
导出显示
以下的完整数据类型(在 Haskell 中)应该是什么?
(bar (foo) 3 5 874)
我相信它会是这样的
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")
。
我假设 Ident 类型是字符串。
- bar 作为 Atom 是
I "bar"
,作为 SExpr 是A (I "bar")
- 同上 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)
]