Ich versuche, eine verkettete Liste in Haskell mit dem folgenden Code zu drucken:Variable in ihrem Umfang nicht Fehler in der Funktion der Einsatz von Wachen
data List = Node {value:: Double, next:: List}
| Empty
printList :: List -> String
printList x | x == (Node v n) = show v ++ " " ++ printList n
| otherwise = show '_'
Und die Kompilierungsfehler erhalten:
:load scratch.hs
[1 of 1] Compiling Main (scratch.hs, interpreted)
scratch.hs:5:26: error: Variable not in scope: v :: Double
scratch.hs:5:28: error: Variable not in scope: n :: List
scratch.hs:5:38: error: Variable not in scope: v
scratch.hs:5:53: error: Variable not in scope: n :: List
Failed, modules loaded: none.
Während ich Ich bin in der Lage, dasselbe zu tun, indem ich die Mustererkennung ohne Wächter benutze.
printList (Node v n) = show v ++ " " ++ printList n
printList Empty = ""
Was ist falsch mit dem ersten Code?
In 'drucke (Node vn)', 'v' und' n' sind Argumente, aber in 'x == (Knoten vn)' sie sind zwei undefinierte Variablen. – ForceBru
@ForceBru Gibt es eine Möglichkeit zu unterscheiden, welcher Datenkonstruktor x verwendet? –