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