我正在尝试编写一些haskell代码来确定字符串是偶数还是奇数。
even l evaluates to S 0 if l is a list of even length and evaluates to 0 if l is not of even length, for example
even a1:a2:a3:a4:# ---> S 0
even a1:a2:a3:a4:a5:# ---> 0
我不确定要去哪里,任何帮助将不胜感激。解释器看起来像这样
execCBN :: Program -> Exp
execCBN (Prog e) = evalCBN e
evalCBN :: Exp -> Exp
evalCBN (EApp e1 e2) = case (evalCBN e1) of
(EAbs i e1') -> evalCBN (subst i e2 e1')
e1' -> EApp e1' e2
evalCBN (EIf e1 e2 e3 e4) = if (evalCBN e1) == (evalCBN e2) then evalCBN e3 else evalCBN e4
evalCBN (ELet i e1 e2) = evalCBN (EApp (EAbs i e2) e1)
evalCBN (ERec i e1 e2) = evalCBN (EApp (EAbs i e2) (EFix (EAbs i e1)))
evalCBN (EFix e) = evalCBN (EApp e (EFix e))
evalCBN (EMinusOne e) = case (evalCBN e) of
ENat0 -> ENat0
(ENatS e) -> e
evalCBN (ENatS e') = ENatS (evalCBN e')
evalCBN x = x
首先,这是一些建议,可改善您将来在StackOverflow上进行的问答: