bst
(二分探索木) ユニオン型を作りたいです。
またはのいずれleaf
かnode
です。ノードの場合、'a
キーと'b
値を取ります。
これは私がしました:
type 'a*'b bst =
| Node of 'a * 'b * ('a*'b) bst * ('a*'b) bst
| Leaf;;
しかし、それは機能しません
どうすればいいですか?
bst
(二分探索木) ユニオン型を作りたいです。
またはのいずれleaf
かnode
です。ノードの場合、'a
キーと'b
値を取ります。
これは私がしました:
type 'a*'b bst =
| Node of 'a * 'b * ('a*'b) bst * ('a*'b) bst
| Leaf;;
しかし、それは機能しません
どうすればいいですか?
探している構文は次のとおりです。
# type ('a, 'b) bst =
| Node of 'a * 'b * ('a,'b) bst * ('a,'b) bst
| Leaf;;
type ('a, 'b) bst = Node of 'a * 'b * ('a, 'b) bst * ('a, 'b) bst | Leaf
マルチパラメータ多相型の構文は次のとおりです。
type ('a, 'b) bst =
| Node of 'a * 'b * ('a, 'b) bst * ('a, 'b) bst
| Leaf;;
'a
また、比較演算子が必要なため、トラブルが発生する可能性があります。これが、標準ライブラリでMap
およびSet
モジュールがファンクタとして実装されている理由であり、比較順序を指定できるようになっています。
ポリモーフィズムの方法に従うこと'a
にした場合は、「魔法の」デフォルトの比較演算子を使用する必要がありますcompare
。
比較演算子を型にアタッチする方法があるため、F# では問題が異なります。