eine Funktion remove_option schreiben, die einen String und eine Stringliste nimmt. Rückgabe Keine, wenn die Zeichenfolge nicht in der Liste enthalten ist, sonst EINIGE xs zurück, wo xs auf die Argumentliste mit Ausnahme der Zeichenfolge identisch ist, ist nicht drin. Sie können davon ausgehen, dass die Zeichenfolge höchstens einmal in der Liste enthalten ist. Verwenden Sie same_string, das Ihnen zur Verfügung gestellt wurde, um Strings zu vergleichen. Die Probenlösung ist ungefähr 8 Zeilen lang.rechts Seite der Klausel nicht einverstanden mit der Funktion Ergebnistyp
Der Funktionstyp fn werden sollte: string * String-Liste -> string Liste option.Here meinen Code
fun same_string(s1 : string, s2 : string) =
s1 = s2
fun remove_option (str: string ,str_list : string list) =
case str_list of
[] => NONE
| x::xs => if same_string(x,str)
then SOME xs
else x :: remove_option(str,xs)
und der Fehlerbericht
hw2provided.sml:10.5-15.37 Error: right-hand-side of clause doesn't agree with f
unction result type [tycon mismatch]
expression: _ option
result type: string list
in declaration:
remove_option =
(fn (<pat> : string,<pat> : string list) =>
(case str_list
of <pat> => <exp>
| <pat> => <exp>))
uncaught exception Error
raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:292.17-292.20
Also, wo der Fehler ist?
Was meinst du mit "injiziert"? Ich verstehe es intuitiv, basierend auf dem Code-Snippet, aber scheint hier eine eher technische Bedeutung zu haben. –
Es bedeutet wahrscheinlich nur, was Sie denken, dass es bedeutet.Wenn 'remove_option' eine Funktion' string * string -> bool' als Argument angenommen hat, dann muss * 'a * kein Gleichheitstyp sein. –
Oh, ok, also wurde es als Argument übergeben. Vielen Dank. Ich dachte du meinst etwas ähnliches wie das 'inject' hier: http://mlton.org/UniversalType –