Ich arbeite an einer einfachen BST-Implementierung in F # und habe einen Stolperstein getroffen, den ich nicht finden kann.F # Binärbaum Insert-Typ Fehler
Dieser Code:
type BST =
| Empty
| TreeNode of int * BST * BST
let rec insert value tree = function
| Empty -> TreeNode(value, Empty, Empty)
| TreeNode(hd, left, right) as node ->
if hd = value then node
elif value < hd then TreeNode(hd, insert value left, right)
else TreeNode(hd, left, insert value right)
Ergebnisse in dem folgenden Fehler:
error FS0001: This expression was expected to have
type
'BST'
but here has type
'BST -> BST'
, die zu diesen beiden Codezeilen bezieht
elif value < hd then TreeNode(hd, insert value left, right)
else TreeNode(hd, left, insert value right)
speziell die rekursive Aufrufe ... insert value left, ...
und ... insert value right)
Ich verstehe F # gut genug, um zu verstehen, warum dies ein Problem für den Compiler ist. Wenn es ausgeführt wird, sollte dieser Wert nicht einfach BST eingeben? Ist das nicht der Sinn dieser Art von Rekursion?
Gibt es einen Vorteil eine Muster-Match-Funktion die zweite Art und Weise über die erste Art und Weise, oder umgekehrt zu strukturieren? – user3776749
Es ist kürzer. Ansonsten genau gleichwertig. –
@ user3776749 Ja, die Verwendung von 'function' ist verschleiert und anfällig für Fehler wie deins. –