2016-12-26 1 views
-1

私は関数型プログラミングでは新しいですが、私はF#を学び、質問が愚かであれば申し訳ありません。 構文を理解し、単純なデータ構造を実装したいのですが、どうやってそれを行うのか分かりません。機能的アプローチを使用してデータ構造を実装する方法は? (リンクされたリスト、木など)

リンク先リストの実装方法は? タイプを作成し、そこに変更可能なプロパティを入れて、そのタイプで動作するメソッドのセットを定義しようとしましたが、オブジェクト指向のリンクリストのように見えます...

+1

あなたはF#を学ぶことに決めたと聞いてうれしいです。しかし、霧のような質問のためのより良い場所ではありません。 –

+3

[F#Slack Team](http://fsharp.org/guides/slack/)に参加することを強くお勧めします。また、[F#on SO](http://chat.stackoverflow.com)でそのような質問をすることもできます/ rooms/51909/f) –

答えて

4

F#の基本リストタイプはすでに多少リンクリストです。 あなたは簡単に、単純な労働組合の種類とリンクリスト再作成することができますが:

type LinkedList<'t> = Node of 't * LinkedList<'t> | End 

をノードが値と次のノードへのポインタを持っているか、終了することができます。あなたは、単に手で新しいリストを作ることができ :

Node(1, Node(2, Node(3, End))) //LinkedList<int> = Node (1,Node (2,Node (3,End))) 

それともそれをF#のリストを供給することによって、新たなリンクリストを作る:

let rec toLinkedList = function  
    | [] -> End 
    | x::xs -> Node (x, (toLinkedList xs)) 

それを介して歩く:

let rec walk = function 
    | End -> printfn "%s" "End" 
    | Node(value, list) -> printfn "%A" value; walk list 

同様の概念がツリー構造にも適用されます。 ツリーは、F#Wikibookは、F#でデータ構造にgood articleを持って

type Tree<'leaf,'node> = 
    | Leaf of 'leaf 
    | Node of 'node * Tree<'leaf,'node> list 

ようになります。

関連する問題