两种简单的方法来做到这一点:
- fun addstring (x::xs) a = (a^x) :: addstring xs a
= | addstring [] a = []
= ;
val addstring = fn : string list -> string -> string list
- addstring ["A", "B", "C", "D"] "A";
val it = ["AA","AB","AC","AD"] : string list
上面使用模式匹配来破坏列表,执行操作,然后再次构造列表,随着它的进行递归。
- fun addstring2 xs a = map (fn x => a^x) xs;
val addstring2 = fn : string list -> string -> string list
- addstring2 ["A", "B", "C", "D"] "A";
val it = ["AA","AB","AC","AD"] : string list
这个比较简单(如果可能比 addstring 中的显式情况更难阅读。)但它显示了 map 的使用方式 - 您指定一个将每个元素从源域映射到目标域的函数,给它源域中的元素列表,它返回目标域中的列表。
当然,这些都不会对列表进行就地更新,它们会返回新列表。