Я сейчас пытаюсь выучить smlnj и у меня возникают проблемы с функцией сгиба.
Я пытаюсь написать функцию, выбрать, которая использует шаблон свертывания и принимаетфункция и список.Он возглавит список в функции, чтобы определить, будет ли он добавлять этот элемент в список.Вот пример того, что я имею в виду.
select (fn x => x mod 2 = 0) [1,2,3,4,5,6,7,8,9,10];
val it = [2,4,6,8,10] : int list
Итак, вот что я имею до сих пор ...
fun select f l = foldl (fn (x,y) => if (f(x)) then x else 0) 0 l;
Это, очевидно, работает неправильно.Он просто возвращает 10. Я уверен, что мне нужно как-то использовать op ::, чтобы заставить это работать, но я не могу понять это.Я думаю, что это должно выглядеть примерно так ...
fun select f l = foldl (fn (x,y) => if (f(x)) then op:: else []) [] l;
Но это не работает.Любая помощь будет оценена.Спасибо!