这是正确的语法,但您也可以将其简化一点。
首先,观察表达式
x == True
相当于
x
. 这样你就可以放下
== True
.
== False
这一部分根本不需要。这是因为当你开始检查这个案例时,你已经知道
isEmpty right == False
所以,整个事情可以这样写:
mybstInsert k inp@(INode left key right)
| k < key = myNode (mybstInsert k left) key right
| k > key && isEmpty right = myNode left key (mybstInsert k right)
| k > key = myNode left key (mybstInsert k right)
k == key
,所以您的程序会在这样的输入下崩溃。如果你想包括这个案例(我假设它只是一个不可操作的案例),那么你甚至不必包括
k > key
检查一下,因为到那时已经知道
k==键
也没有
k < key
这是真的:
mybstInsert k inp@(INode left key right)
| k == key = inp
| k < key = myNode (mybstInsert k left) key right
| isEmpty right = myNode left key (mybstInsert k right)
| otherwise = myNode left key (mybstInsert k right)