0

別の単純なプログラミング言語用に Haskell でインタープリターを作成する過程で、Haskell でのタイピングを学ぶときに頭を壁にぶつけていることに気づきます。

2 つのカスタム データ型があります

data Expr
    = Var Var
    | NumE Int
    | NilE
    | ConsE Expr Expr
    | Plus Expr Expr
    | Minus Expr Expr
    | Times Expr Expr
    | Div Expr Expr
    | Equal Expr Expr
    | Less Expr Expr
    | Greater Expr Expr
    | Not Expr
    | Isnum Expr
    | And Expr Expr
    | Or Expr Expr
    | Head Expr
    | Tail Expr
    | Call String
    deriving (Show, Read)

data Val = Num Int | Nil | Cons Val Val
    deriving (Eq, Show, Read)

関数 interpret_expr を使用して、これらのオプションを解釈するケースを書き始めています。

interpret_expr :: Vars -> Expr -> Val
interpret_expr vars@(Vars a b c d) (NumE integer) = integer

しかし、これは、式「整数」の実際の型「Int」と予想される型「Val」を一致させることができなかったと不平を言います。しかし、私はそれを何かばかげたものに変更するとしましょう

interpret_expr :: Vars -> Expr -> Val
interpret_expr vars@(Vars a b c d) (NumE 'a') = 'a'

次に、「a」で、予想される型「Int」と実際の型「Char」を一致させることができないと不平を言います。今、それはINTを望んでいます?????? 私は本当に何を言うべきかわかりません.NumEに整数と見なすことができる変数を提供するのと同じくらい簡単だと本当に思っていました. 私は何を間違っていますか?

4

1 に答える 1

5

最初のケースではInt、 a を返すと宣言した関数から an を返していValます。あなたの定義から、Valおそらくここに戻りたいようですNum integer

2 番目のケースでは、問題はパターン マッチングにあります。はとして定義されているためエラー(NumE 'a')です。NumENumE IntIntChar

于 2013-04-09T02:41:38.887 に答える