【问题标题】:How do I iterate a list?如何迭代列表?
【发布时间】:2013-01-17 16:00:20
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: sml smlnj


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

    当然,它们都不会对列表进行就地更新,它们会返回新列表。

    【讨论】:

    • 你能告诉我是否真的可以绕过这个列表吗?在上述情况下,它会是包含列表 ["AA","AB","AC"] 的“a”吗?与传递我的意思是如果一个函数 add 调用 addString 函数将值 a 传递给 add 函数??
    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2019-09-17
    • 2021-10-28
    • 2020-05-24
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多