これらの仕様に答える関数を書く必要があります。
clean_list( [],s1] = NONE
clean_list( xs, "") = NONE
clean_list ([s1, s1, s1, s1], s1) = NONE
clean_list([s1, s2, s3, s2, s1], s3) = [s1, s2, s2, s1]
ここs1
でs2
、、、はs3
文字列とxs
文字列のリストです。
2 つのヘルパー関数を使用してそれを行うことができましたがis_into(xs: string list, s1: string) -> bool
、remove(xs: string list, s1: string) -> string list
リストを 2 回再帰するのは見苦しく思えます。
clean_list(xs: string list, s1: string) =
case (xs, s1) of
( [], _ ) => NONE
|( _, "" ) => NONE
|( _, _) => if is_into(xs, s1)
then remove(xs, s1)
else NONE
is_into
リストを 2 回 (1 回と 1回)再帰せずにそれを行う方法はありremove
ますか?
注: 組み込み関数は使用されません。
すみません、仕様書の重要なケースを忘れていました
clean_list ([s1, s2, s3, s4], s10] = NONE