Sml 如何迭代列表?

Sml 如何迭代列表?,sml,smlnj,Sml,Smlnj,我正在尝试使用SML进行基本的列表操作 我想提取列表中的每个元素,并将字符串附加到该元素,然后将其添加回列表。 例如: 如何在SML中遍历列表中的每个元素?我可以使用^附加字符串,并使用@连接列表,但如何从列表中提取每个元素 我们还可以使用map或array之类的东西来存储这些列表值并将其传递给SML中的不同函数吗 我只能找到一些关于地图的模糊信息,而没有关于如何使用地图的明确信息。两种简单的方法: - fun addstring (x::xs) a = (a^x) :: addstring x

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

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

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

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


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

两种简单的方法:

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


当然,这两种方法都不会就地更新列表,而是返回新列表。

您能告诉我是否可以传递此列表吗?在上述情况下,持有清单[“AA”、“AB”、“AC”]的是“a”吗?对于pass-around,我的意思是如果add函数调用addString函数,值a会被传递给add函数吗??
- 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