Was Sie testen, x::xl = []
, wird niemals wahr sein. Listen sind algebraische Typen und sind definiert als
datatype 'a list = :: of 'a * 'a list
| []
Wert bedeutet, dass eine Liste ist entweder die leere Liste oder ein Element setzen vor einer anderen Liste.
Sobald Ihre ursprüngliche Mustererkennung von x::xl
erfolgreich war, wissen Sie, dass es nicht leer ist. (Das sollte aber ziemlich klar sein, denn was würde es x
zuweisen, wenn x::xl
leer war; das erste Element der leeren Liste?)
Sie scheinen hier zwei Stile zu mischen, einer ist Mustererkennung und der andere Sein Wenn-dann-sonst.
fun p [] = []
| p (_::_) = [0]
fun p xs = if List.null xs then [] else [0]