【问题标题】:SML: I want to go through a list and return the number of elements that return true when inputted into a given functionSML:我想遍历一个列表并返回输入给定函数时返回 true 的元素数
【发布时间】:2018-08-11 07:54:25
【问题描述】:

这个问题可能听起来令人困惑,但基本上 我想制作一个接收列表和另一个函数的函数。现在通过该列表,我想获取在输入到此参数函数时返回 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);

【问题讨论】:

    标签: list sml ml


    【解决方案1】:

    该函数不应返回布尔值,因此您的助手也不应返回。
    “递增”也是一个在没有变异的语言中没有多大意义的概念。
    counter = counter + 1是一个永远不会正确的比较。)

    你不需要帮助器,但你需要递归思考:

    • 如果列表为空,则结果为零。
    • 如果列表不为空:
      • 如果给定的谓词对于列表的头部为真,则结果比在列表尾部递归的结果多一。
      • 如果给定谓词对于列表头部为假,则结果与在列表尾部递归的结果相同。

    在机器学习中:

    fun numberExisting _ [] = 0
      | numberExisting f (x::xs) = if f x 
                                   then 1 + numberExisting f xs
                                   else numberExisting f xs
    

    【讨论】:

    • 谢谢,我自己花了一段时间才找到这个解决方案,但它更有意义。我会继续练习以更好地理解机器学习。
    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多