问题可能听起来令人困惑,但基本上 我想创建一个包含列表和另一个函数的函数。现在浏览该列表我想得到输入到此参数函数时返回true的元素数。我是sml的新手,所以我的错误在于我打算在辅助函数中添加一个计数并将其与If语句一起递增,但我很快就学到了你不能真正增加ml的值。有人可以解释更多的sml方式吗?我只是想了解我所缺少的东西。
fun helper f nil counter = false
| helper f xs 1 = true
| helper f (x::xs) counter =
if (f x) = true then
counter = counter + 1
else
counter = counter + 0
fun numberExisting f alist = (helper f alist 0);
答案 0 :(得分:1)
该函数不应返回布尔值,因此你的助手也不应该
"递增"也是一种在没有变异的语言中没有多大意义的概念
(counter = counter + 1
是一种永远不会成真的比较。)
你不需要助手,但你需要递归思考:
在ML:
fun numberExisting _ [] = 0
| numberExisting f (x::xs) = if f x
then 1 + numberExisting f xs
else numberExisting f xs