如何迭代列表?

时间:2010-11-23 03:50:21

标签: sml smlnj

我正在尝试使用SML进行基本列表操作。

我想提取列表的每个元素并将字符串附加到该元素并将其添加回列表。 例如:

List : [A,B,C,D]
String : A
Final List: [AA,AB,AC,AD]

如何在SML中遍历列表中的每个元素?我可以使用^附加字符串并使用@连接列表但是如何从列表中提取每个元素?

我们也可以使用map或数组之类的东西来存储这些列表值并将它传递给SML中的不同函数吗?

我可以找到一些关于地图的模糊信息,而没有关于我们如何使用它的明确信息。

1 个答案:

答案 0 :(得分:1)

两种简单的方法:

- 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 - 指定一个函数将每个元素从源映射到目标域,给它一个源域中的元素列表,并返回目标域中的列表。

当然,这些都不会对列表进行就地更新,而是返回新列表。