Это правильный синтаксис, но вы также можете немного его упростить.
Во-первых, обратите внимание, что выражение 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 == key
ни 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)