0

これは宿題からの抜粋です。"Progこのデータ型にはコンストラクターが1つだけあり、次の形式のプログラムを表すために使用する必要があります。

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

このコンストラクターは、Progという名前も付けられ、2つの入力変数と1つの出力変数の名前の文字列を取ります。」

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

コンストラクターにも「いくつかのステートメント」を含める必要があると言いました。現在、2 つの入力変数と出力変数用のスペースしかありません。たとえば、次のように、ステートメントに別のフィールドを追加するだけです。

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 に答える