0

这是家庭作业的节选。“Prog 这个数据类型应该只有一个构造函数,并用于表示以下形式的程序:

read vin1 ; read vin2 ; < some statements > write vout2 ;

这个构造函数也可以命名为 Prog,它采用一个字符串作为两个输入和一个输出变量的名称。”

将 expProg 定义为 Prog 类型,并且是左上角程序的抽象语法表示。这应该按如下方式进行:

expProg = Prog "x" "y" <some statements> "z"

我是 Haskell 的新手,对此感到困惑。

我做了一个这样的构造函数。然而,这似乎不对。

data Prog = Prog String String String 
  deriving (Show,Eq)

谁能解释这里发生了什么?我不明白如何制作这个构造函数。这是我为语句制作的数据类型:

 data Stmt = Assing String Expr
      | WhileLoop Expr Stmt
      | Ifthen Expr Stmt
      | IfthenElse Expr Stmt Stmt
      | Composition [Stmt]
4

1 回答 1

6

您说您还需要在构造函数中包含“一些语句”。目前,您只有两个输入变量和输出变量的空间。只需为语句添加另一个字段,例如:

data Prog = Prog String String Stmt String
--                                  ^ output variable
--                             ^ some statements
--                       ^ input variable 2
--               ^ input variable 1

现在你可以像这样使用它:

expProg = Prog "x" "y" (Composition [Assing "x" (...some expression...),
                                     Assing "z" (...some expression...)])  "z"

(请注意,它实际上是拼写的Assign,而不是Assing

于 2012-11-28T10:38:34.593 回答