Ada*_*ein 1 tree haskell operators haskell-platform
我对Haskell非常陌生,我试图围绕语法(以及习惯于声明性语言).我已经创建了一个树数据类型,我希望能够使用==运算符来比较它们.这就是我所拥有的:
data Tree =
Leaf
| Twig
| Branch Tree Tree Tree
deriving Show;
instance Eq Tree where
Leaf == Leaf = True;
(Branch a b c) == (Branch a1 b1 c1) = a==a1 && b==b1 && c==c1;
Run Code Online (Sandbox Code Playgroud)
这似乎在输入时起作用:Leaf == Leaf或者Branch Leaf Leaf Leaf == Branch Leaf Leaf Leaf在我添加时它不断给我一个错误Twig == Twig = True;.此外,没有办法比较Leaf == Branch Leaf Leaf Leaf.我尝试过使用,_==_ = False;但也给了我一个错误.我输了,任何帮助都将不胜感激!
编辑:仍然有错误,特别是:
[1 of 1] Compiling Main ( Tree.hs, interpreted )
Tree.hs:15:5: parse error on input ‘_’
Failed, modules loaded: none.
Prelude> :r
[1 of 1] Compiling Main ( Tree.hs, interpreted )
Tree.hs:15:3: parse error on input ‘Twig’
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
第一个是在我拿出有问题的Twig ==后,留下_ == _.第二个是留下两个.
你的代码对我来说很有用,你说的是你说的错误
instance Eq Tree where
Leaf == Leaf = True;
(Branch a b c) == (Branch a1 b1 c1) = a==a1 && b==b1 && c==c1;
Twig == Twig = True;
_ == _ = False;
Run Code Online (Sandbox Code Playgroud)
(顺便说一下;,线路末端是多余的.)
我怀疑你可能有缩进错误.你在混合标签和空格吗?
此外,所有实例声明都等同于将deriving子句更改为
deriving (Show,Eq)
Run Code Online (Sandbox Code Playgroud)
因为这正是默认派生Eq实例的工作原理.