我有一门关于函数式编程的大学课程,我在其中使用 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
andfoldr
功能有所了解!