Ben*_*sen 0 haskell abstract-syntax-tree
这是家庭作业的摘录."Prog此数据类型应该只有一个构造函数,并用于表示窗体的程序:
read vin1 ; read vin2 ; < some statements > write vout2 ;
Run Code Online (Sandbox Code Playgroud)
这个构造函数也可以命名为Prog,它接受一个字符串作为两个输入和一个输出变量的名称."
将expProg定义为Prog类型,并将其作为上面左侧程序的抽象语法表示.这应该做如下:
expProg = Prog "x" "y" <some statements> "z"
Run Code Online (Sandbox Code Playgroud)
我是Haskell的新手,对此感到困惑.
我做了这样的构造函数.然而,这似乎不对.
data Prog = Prog String String String
deriving (Show,Eq)
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这里发生了什么?我不明白如何制作这个构造函数.这是我为语句做的数据类型:
data Stmt = Assing String Expr
| WhileLoop Expr Stmt
| Ifthen Expr Stmt
| IfthenElse Expr Stmt Stmt
| Composition [Stmt]
Run Code Online (Sandbox Code Playgroud)
你说你需要在构造函数中包含"some statements".目前,您只有两个输入变量和输出变量的空间.只需为语句添加另一个字段,例如:
data Prog = Prog String String Stmt String
-- ^ output variable
-- ^ some statements
-- ^ input variable 2
-- ^ input variable 1
Run Code Online (Sandbox Code Playgroud)
Now you can use it like so:
expProg = Prog "x" "y" (Composition [Assing "x" (...some expression...),
Assing "z" (...some expression...)]) "z"
Run Code Online (Sandbox Code Playgroud)
(Note that it's actually spelled Assign, not Assing)