SML:我想遍历一个列表和 return 输入给定函数时 return 为真的元素数量
SML: I want to go through a list and return the number of elements that return true when inputted into a given function
这个问题可能听起来很混乱,但基本上
我想制作一个接受列表和另一个函数的函数。现在浏览该列表,我想获得输入到此参数函数时 return 为真的元素的数量。我是 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);
函数不应该 return 布尔值,所以你的助手也不应该。
"Incrementing"也是一个概念,在没有突变的语言中没有多大意义。
(counter = counter + 1
是一个永远不会正确的比较。)
你不需要助手,但你需要递归思考:
- 如果列表为空,则结果为零。
- 如果列表不为空:
- 如果给定的谓词对于列表的头部为真,则结果比在列表的尾部递归的结果多一。
- 如果列表头部的给定谓词为假,则结果与在列表尾部递归的结果相同。
在 ML 中:
fun numberExisting _ [] = 0
| numberExisting f (x::xs) = if f x
then 1 + numberExisting f xs
else numberExisting f xs
这个问题可能听起来很混乱,但基本上 我想制作一个接受列表和另一个函数的函数。现在浏览该列表,我想获得输入到此参数函数时 return 为真的元素的数量。我是 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);
函数不应该 return 布尔值,所以你的助手也不应该。
"Incrementing"也是一个概念,在没有突变的语言中没有多大意义。
(counter = counter + 1
是一个永远不会正确的比较。)
你不需要助手,但你需要递归思考:
- 如果列表为空,则结果为零。
- 如果列表不为空:
- 如果给定的谓词对于列表的头部为真,则结果比在列表的尾部递归的结果多一。
- 如果列表头部的给定谓词为假,则结果与在列表尾部递归的结果相同。
在 ML 中:
fun numberExisting _ [] = 0
| numberExisting f (x::xs) = if f x
then 1 + numberExisting f xs
else numberExisting f xs