下面的Haskell代码抱怨在最后第二行,当我试图检查表达式是否评估为Cons _ _形式。 Haskell的错误信息是:“表达式上下文中的模式语法:_” - 我想知道的是 - 有没有办法完成我想要做的事?看起来我试图做的是在运行时检查一个表达式的类型,从我读过的内容可能意味着我可以更好地编程这个表达式?但是,因为我是初学者,所以我不知道我是否在做这件事,特别是因为我一直试图在最后一个小时内做到这一点。Haskell类型检查/模式匹配
data Val = Num Int | Nil | Cons Val Val
deriving (Eq, Show, Read)
interpret_expr :: Prog -> Vars -> Expr -> Val
interpret_expr _ _ (Isnum NilE) = Num 0
interpret_expr _ _ (Isnum (ConsE _ _)) = Num 0
interpret_expr _ _ (Isnum (NumE _)) = Num 1
interpret_expr prog vars (Isnum expr)
| interpret_expr prog vars expr == Nil = Num 0
| interpret_expr prog vars expr == Cons _ _ = Num 0
| otherwise = Num 1
虽然这个答案是伟大的,我选择另外一个,因为它更简单,就是做我想做的最简单方法。不过,我很高兴你告诉我,因为我100%肯定我最终会需要这个,最初我以为我会被告知不能,你不能检查你是愚蠢的新手建设者,有时间重写整个东西(数百行)!!! – nebffa 2013-04-11 09:03:50
弗拉基米尔的答案绝对是正确的解决方案。我非常狭隘地将注意力集中在你呼出的线上,很高兴你觉得它很有趣。 – 2013-04-11 16:23:44