Я пытаюсь изучить smlnj в данный момент, и у меня проблемы с функцией сворачивания.
Я пытаюсь написать функцию select, которая использует шаблон сворачивания и принимает функцию и список. Он перенесет заголовок списка в функцию, чтобы определить, добавит ли он этот элемент в список. Вот пример того, что я имею в виду.
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;
Но это не работает. Любая помощь будет оценена. Спасибо!