###実装したい内容
[ ["apple";"grape"] ; ["orange";"apple"] ; ["lemon";"melon";"banana"] ] (=BIG_list)
のような文字列のリストのリストが引数として与えられたときに
[ ("apple",1) ; ("apple",2) ; ("grape", 1) ; ("orange",2); ... ; ("banana",3) ]
のようなリストを返す関数
###現段階で私が考えている実装方法
(1)指定した要素がリスト内に属しているかを返すmember関数を作る
ocaml
1#let rec member string list = 2 match list with 3 | [] -> false 4 | h::t -> (string=h) || member string t;;
(2)重複なしの文字列によるリストを生成する
["apple";"grape";"orange";"lemon";"melon";"banana"] (=ELE_list)
そのためにBIG_listの要素をある入れてこれを作れるような関数を考える
次の応用
ocaml
1# let rec unduplicate a = 2match a with 3| [] -> [] 4| h::t -> if member h t then unduplicate t 5else h::unduplicate t;;
(3)
ocaml
1math BIG_list with 2| [] -> [] 3| h::t -> member string h
のような形でELE_listの要素がBIG_list中のリストに含まれているかを確認していく(再帰を用いる).このときcountなどの変数で,今のhがBIG_list中の何番目かを数え,member関数がtrueならば,そのcountと文字列のタプルを格納する.
###問題点
(2)まではなんとか実装の方法を具体的に組めそうなのですが,(3)はやる内容が複雑で,二重のループを組む必要があるので,そこの具体的な実装が思い浮かびません.
###教えていただきたいこと
現段階の私の方法に具体的な実装,もしくは,新たな実装のアルゴリズム
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/16 07:43