algorithm - 计算列表列表中的元素数量

标签 algorithm list ocaml sml

我必须调整标准机器学习中的现有代码,但现在遇到了问题。

我有一个函数,它返回一个元素列表(我们称它们为节点(或世界))

val worlds = listNodes()

对于每个世界,我都有一个函数fun listSuccessors w r,它返回每个世界的后继者数量。

我的问题是:如何获取全局的继任者数量?

在伪代码中,我想要这样的东西:

worlds <--  listNodes ()
solution  <-- 0

foreach w in worlds do 
     solution <-- solution + (length (listSuccessors w))
end foreach

return solution

但不幸的是我不知道该怎么做:/

以下是现有功能:

fun listSuccessors w r =
        let
            val succs =
                case Dynarraydict.get (nodes, Node.getId w)
                    of ROOT (_, _, succs) => succs
                     | _ => Exn.unexpArg "Nodestore.listSuccessors.succs"
        in
            List.mapPartial (fn (n, r', _) => if r = r' then SOME (getNode n) else NONE) succs
        end

fun listNodes () = Dynarraydict.foldr (fn (_, ROOT item, ys) => (#1 item)::ys | (_, _, ys) => ys) nil nodes  

提前感谢您的帮助:/不幸的是,我是标准机器学习的初学者,因此理解如何操作列表列表非常复杂。 :/

最佳答案

一些提示:使用 List.fold 和 List.length 求列表大小的总和。 只需一行,您就应该能够实现您的伪代码。 它应该是这样的:

List.fold (fun acc x -> acc+List.length x) 0 your_list_of_list.

关于algorithm - 计算列表列表中的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563845/

相关文章:

bash - 获取所有文件夹中所有文件的内容

python - 清理数据 : How to iterate through a list find if item contains a string, 空白或空白并在 Python 中删除该项目

emacs - 使用 tuareg 在 Emacs 中启动自定义 OCaml 顶层的便捷方式

string - Ocaml - 字符串到 (int*int*int) 列表

java - 比较一个 ArrayList 并组合共同的元素

algorithm - 如何用函数式语言编写简单的树算法?

python - 在python(2.5)中将数据添加到列表中没有重复项的最快方法是什么

windows - 带有自定义链接的 OCaml 编译是否应该在 Windows 中工作(通过 MinGW)?

c++ - 如何将坐标分布对齐到完美对齐?

c# - 如何将逗号分隔的字符串转换为 List<int>