Я пытаюсь создать функцию в SML, которая принимает список и целое число и возвращает список всех элементов, которые меньше целого int * int list -> int list
Я написал следующий код:
- fun less (e, L) =
= map (fn a => if a < e then a else []) L;
также со следующим кодом это не работает также:
- fun less (e, L) =
= map (fn a => if a < e then a) L;
и ошибка, которую я получаю:
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
Я думаю, что проблема с остальной частью, но я не знаю, чтопоставить его на работу, кто-нибудь есть какие-либо предложения?Я должен использовать функции map, foldl или foldr.
EDIT:
- fun less (e, L) =
= let
= val acc = []
= in
= foldr (fn a => if a < e then a::acc else acc) acc L
= end;
по-прежнему выдает ошибку, следующая ошибка:
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)