4

昨日、F# のプログラミングを始めたばかりであることを理解してください。

ノードのリストがあり、それらのノードには子のリストがあるc#にこのアルゴリズムがあります。

どうすればこれを達成できますか?F# は不変型を扱い、変数/オブジェクトを変更することはお勧めできません。それについて行く良い方法は何ですか?

C#

public class Node
{
    public List<Node> childrenNode = new List<Node>();
    public void AddChildren(Node node)
    {
        childrenNode.Add(node);
        node.Parent(this);
    }
}

F#

type Node(board:Board)=
     let mutable _childrenNode= Set.empty
     new() = Node()
     member AddChildren(node:Node)=
4

2 に答える 2

4

F# でツリー構造を表す最も簡単な方法は、判別共用体を使用することです。各ノードに値を格納する機能も追加する例を次に示します。

type Tree<'T> =
    | Empty
    | Node of option<'T> * List<Tree<'T>>

したがって、Tree型は 2 つのケースで構成されます。空のツリーか、オプションの値と子のリストを持つノードです。

データ型は不変であるため、add 関数では、追加ノードのリストとともに既存のツリーを渡す必要があります。

let addChildren (nodes: list<Tree<'T>>) (tree: Tree<'T>) : Tree<'T> =
    match tree with
    | Empty        -> Node (None, nodes)
    | Node (v,chs) -> Node (v, chs @ nodes)

パターン マッチングは、値の 2 つの形状を区別するために使用されTreeます。

于 2013-10-02T14:40:56.460 に答える