F#を学習しようとしている場合は、StackOverflowで質問するのではなく、実際にF#を学習してみてください。ただし、どちらの質問も、コミュニティの他のメンバーに基本的なF#を実際に示すことができる合理的な質問のように聞こえるので、考えられる解決策をいくつか示します。
メンバーテストは、再帰関数として実装できます。true
アイデアは、リストを調べて、必要な値が見つかったら戻るというものです。別の値を見つけた場合は、リストの残りの部分を再帰的に処理する必要があります。最後に到達した場合(そして空のリストを見つけた場合)、false
空のリストには(明らかに)探している値が含まれていないため、を返します。
let rec mem value = function
| x::xs when x = value -> true
| x::xs -> mem value xs
| [] -> false
を使用してユニオンを実装する方法はmem
?ユニオンには、最初のリストにまだ含まれていない(重複を作成したくない)他のリストのすべての要素とともに、1つのリストのすべての要素が含まれます。だから、union list []
なりそうlist
です。2番目のリストが空でない場合(x::xs
)、要素x
が最初のリストにあるかどうかを確認します。はいの場合はスキップし、そうでない場合は結果に追加します。
let rec union list1 list2 =
match list2 with
| [] -> list1
| x::xs when mem x list1 -> union list1 xs
| x::xs -> x::(union list1 xs)
これは末尾再帰を使用していないため、最も効率的なソリューションではありませんが、最初は最も簡単なソリューションです。