對不起,這是一個初學者問題。我只是想讓x = 5,y = 2,並將所有其他變量設置爲零。所有這些工作是驗證p計算5!在下面的代碼中,其中p代表將整數分配給Haskell中的變量
y:= 1;而¬(x = 1)do(y:= y * x; x:= x-1);
type Num = Integer
type Var = String
type Z = Integer
type T = Bool
type State = Var -> Z
data Aexp = N Num | V Var | Add Aexp Aexp | Mult Aexp Aexp | Sub Aexp Aexp deriving (Show, Eq, Read)
data Bexp = TRUE | FALSE | Eq Aexp Aexp | Le Aexp Aexp | Neg Bexp | And Bexp Bexp deriving (Show, Eq, Read)
data Stm = Ass Var Aexp | Skip | Comp Stm Stm | If Bexp Stm Stm | While Bexp Stm deriving (Show, Eq, Read)
p::Stm
p = (Comp(Ass "y" (N 1))(While(Neg(Eq (V "x") (N 1)))(Comp (Ass "y" (Mult (V "y") (V "x")))(Ass "x" (Sub (V "x") (N 1))))))
s :: State {- It has to be Var -> Int-}
s x = 5
s y = 2
而當我嘗試編譯這個,ghci給出模式匹配是重疊的。我知道這是一個非常簡單的問題,但我沒有太多的信息可以解決這個問題。你能給我任何提示嗎?謝謝!
有什麼'Var'類型的定義平等無法進行測試? – Lee
Var是字符串。對不起,我沒有說清楚。@ Lee – dajavanoob
不考慮模式匹配問題,你正在執行錯誤的功能。您需要一個映射到* store *變量/表達式關聯,這些關聯可以在您的評估者遇到'Ass'語句時更改。您的評估人員將使用它來評估'V'值,方法是將它們替換爲存儲在地圖中的值。 – chepner