回答編集履歴

1

(3b)と(3c)の関数を1つにまとめました

2021/05/16 06:19

投稿

tatsuya6502
tatsuya6502

スコア2055

answer CHANGED
@@ -2,11 +2,10 @@
2
2
 
3
3
  (3)を1つの再帰関数でやろうとせずに、いくつかの再帰関数に分けて、それぞれをシンプルなループ(二重になってないループ)にすれば実装できるかもしれません。
4
4
 
5
- たとえば以下のように3つの再帰関数に分けられます。
5
+ たとえば以下のように2つの再帰関数に分けられます。
6
6
 
7
7
  - (3a)の関数:(外側のループ) `ELE_list`の要素(アイテム名)を1つずつ取り出して、`BIG_list`と共に(3b)の関数を適用する
8
- - (3b)の関数:(内側のループ その1) アイテム名と`BIG_list`を引数にとり、そのアイテムが出てくる`BIG_list`の要素番号のリストを返す。例:アイテムが`"apple"`なら`[1; 2]`を返す
8
+ - (3b)の関数:(内側のループ) アイテム名と`BIG_list`を引数にとり、そのアイテムが出てくる`BIG_list`の要素番号を調べる。結果を`[(アイテム名, 要素番号); ..]`の形で返す。例:アイテムが`"apple"`なら`[("apple, 1); ("apple", 2)]`を返す
9
- - (3c)の関数:(内側のループ その2) アイテム名(`"apple"`)と(3b)が返した値(`[1; 2]`)を、`[("apple", 1); ("apple", 2)]`の形へと変換する
10
9
 
11
10
  学習のためにあえて再帰関数で実装する道を選んでいるのかもしれませんが、特に縛りがないのなら再帰関数よりも`List.map`などを活用するのがお勧めです。その方が直感的に書けることが多いです。
12
11