我必须调整标准机器学习中的现有代码,但现在遇到了问题。
我有一个函数,它返回一个元素列表(我们称它们为节点(或世界))
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/