У меня есть университетский курс по функциональному программированию, где я использую SML. В качестве подготовки к экзамену я работаю над некоторыми из старых наборов экзаменов без решений.
Один из немногих вопросов, с которым у меня действительно есть проблемы, это следующий вопрос с использованием foldl
:
Рассмотрим скелет программы: fun addGt k xs = List.foldl(...) ... xs; Заполните две недостающие части (представленные точками ...), так что addGt k xs будет суммой тех элементов в xs, которые больше k. Например, addGt 4 [1, 5, 2, 7, 4, 8] = 5 + 7 + 8 = 20
Я уверен, что это действительно легко, но мне очень трудно понять функции foldl и foldr.
Теперь у меня есть следующее (что кажется очень неправильным, если вы спросите мой компилятор!):
fun addGt(k,xs) = List.foldl ( fn x => if x > k then op+ else 0) 0 xs;
Я был бы очень признателен за помощь в этом вопросе и, возможно, за очень короткий комментарий, который пролил бы свет на функции foldl
и foldr
!