Я новичок в F #.Следовательно, возможно я что-то здесь упускаю.Однако выполнение следующего фрагмента приводит к исключению StackOverflowException:
type Node = {
Position: int*int
mutable North: Node option
mutable South: Node option
mutable West: Node option
mutable East: Node option }
let initialNode = { Position = 0, 0; North = None; South = None; West = None; East = None }
let second = { Position = -1, 0; North = None; South = None; West = None; East = None }
initialNode.West <- Some second
second.East <- Some initialNode
let third = { Position = -1, -1; North = None; South = None; West = None; East = None }
second.North <- Some third
third.South <- Some second
let fourth = { Position = -1, 0; North = None; South = None; West = None; East = None }
third.East <- Some fourth
fourth.West <- Some third
let distanceMap = Map.empty |> Map.add initialNode 0
let needVisit = [ initialNode ]
let newDistanceMap =
(distanceMap, needVisit)
||> Seq.fold (fun map node ->
map |> Map.add node 1)
newDistanceMap |> Map.count
Почему?Если тип ключа карты изменяется на атрибут Position
(который является Tuple
) типа записи, все в порядке.Следовательно, я подозреваю, что проблема заключается в использовании записей в качестве типа ключа в целом, или проблема заключается в использовании типов записей, которые имеют mutable
атрибуты.