F# 具有功能数据结构的死小丑
下面是问题: 我有一家小丑经纪公司,有很多小丑参加不同的派对。有些人参加同一个聚会。我和参加哪个派对的人有个记录。 然后,我有一个死去的小丑,但我需要解析日志以获得要调查的人、小丑和派对中的其他人,还需要所有派对和与死去的小丑相关的小丑(小丑参与过的之前派对中的所有小丑) 基本上,我已经考虑过用图形来解决这个问题,但这可能不是最好的主意,因为在这个问题中使用图形是非常复杂的 我的日志如下:F# 具有功能数据结构的死小丑,f#,functional-programming,F#,Functional Programming,下面是问题: 我有一家小丑经纪公司,有很多小丑参加不同的派对。有些人参加同一个聚会。我和参加哪个派对的人有个记录。 然后,我有一个死去的小丑,但我需要解析日志以获得要调查的人、小丑和派对中的其他人,还需要所有派对和与死去的小丑相关的小丑(小丑参与过的之前派对中的所有小丑) 基本上,我已经考虑过用图形来解决这个问题,但这可能不是最好的主意,因为在这个问题中使用图形是非常复杂的 我的日志如下: type Action = | Move of Clown * Party let logs = A
type Action =
| Move of Clown * Party
let logs = Action list
你认为转换列表并解析它会是一个好的数据结构吗?你是对的,图形非常复杂,但这主要是在开发通用图形时。在你的例子中,我想说的是,图形仍然是最好的方式,因为它将直接模拟情况 我不知道如何在功能范式中做到这一点,但这里有一个好的老式命令式的想法:
n
小丑和编号从0
(包括)到n
(排除)。这些将用作数组索引n*n
数组,初始化为全零i
和j
),将i,j
-th和j-i
-th单元格设置为1我认为上面的描述表明,如果图表是针对特定情况设置的,那么它们不必很复杂。再说一遍,我不确定图形在函数式编程中表现得有多好,因此如果您的目标是以函数式风格完成所有工作,那么图形可能要复杂得多。下面是一个函数式解决方案,使用
Seq.groupBy
函数
logs |> Seq.groupBy (function |Move(clown,party) -> party) |> Map.ofSeq
这将为您提供一张地图
,您可以轻松查询该地图,以查找哪些小丑参加了哪场派对