我是伊莎贝尔的新手并为大学做运动。我需要在Isabelle证明一个反向函数。
在Haskell中,函数看起来像这样:
rev [] = []
rev (x:xs) = rev xs ++ [x]
我现在试着定义这个功能" rev"在伊莎贝尔。类型列表和功能" app" (附加)
错误伊莎贝尔给我的是:
Type unification failed: Clash of types "_
⇒ _" and "_ Exercise5.list"
Type error in application: incompatible operand type
Operator: app (rev xs) ::
'a Exercise5.list ⇒ 'a Exercise5.list
Operand: Exercise5.list.Cons ::
??'a ⇒ ??'a Exercise5.list ⇒ ??'a Exercise5.list
问题出在哪里?据我所知,Isabelle告诉我"嘿伙计app需要2个类型 a'列表,但这不是这里的情况"
但为什么呢? xs 显然属于 a'列表并且使用我的Cons运算符我是否也使x也成为列表?
感谢您的帮助!
答案 0 :(得分:1)
考虑括号应该放在app rev xs Cons x Nil
中的位置:目前,您似乎在其参数x
上应用了函数Nil
。