我需要编写一个函数来回答这些规范:
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
字符串列表。
我可以使用两个辅助函数来做到这一点is_into(xs: string list, s1: string) -> bool
,remove(xs: string list, s1: string) -> string list
但是通过列表递归两次似乎很难看。
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
和一次remove
)?
注意:不要使用任何内置函数。
抱歉,我忘记了规格中的一个重要案例
clean_list ([s1, s2, s3, s4], s10] = NONE