【发布时间】:2013-01-24 08:04:09
【问题描述】:
我需要编写一个函数来回答这些规范:
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
【问题讨论】:
标签: functional-programming sml smlnj