Ich versuche, eine Funktion in SML zu machen, die eine Liste und einen int nimmt und gibt eine Liste aller Elemente, die weniger als die int int * int list -> int list
sind ich den folgenden Code geschrieben:Weniger-als-Funktion in Standard ML
- fun less (e, L) =
= map (fn a => if a < e then a else []) L;
auch mit dem folgenden Code tut es Arbeit auch:
- fun less (e, L) =
= map (fn a => if a < e then a) L;
und der Fehler im bekommen ist:
stdIn:22.15-22.38 Error: types of if branches do not agree [overload]
then branch: 'Z
else branch: 'Y list
in expression:
if a < e then a else nil
Ich denke, das Problem ist mit dem else Teil, aber ich weiß nicht, was ich hineinlegen soll, hat jemand einen Vorschlag? Ich sollte entweder Karten-, Falt- oder Faltfunktionen verwenden.
EDIT:
- fun less (e, L) =
= let
= val acc = []
= in
= foldr (fn a => if a < e then a::acc else acc) acc L
= end;
noch gibt mir Fehler, die folgenden Fehler:
stdIn:241.3-241.54 Error: operator and operand don't agree [overload]
operator domain: 'Z * 'Y -> 'Y
operand: 'X -> 'X list
in expression:
foldr (fn a => if <exp> < <exp> then <exp> :: <exp> else acc)
ich sollte entweder Karte verwenden, foldl oder foldr Funktion –
@ aizen92: Ich kann Ihnen nur einen Hinweis geben. Siehe meine aktualisierte Antwort. – pad
was meinst du mit vorgeben? –