2010-11-23 70 views
2

我想用SML做基本的列表操作。如何迭代列表?

我想提取列表中的每個元素並將字符串附加到該元素並將其添加回列表中。 例子:

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

我怎樣才能在SML列表中通過每個元素迭代?我可以使用^附加字符串,並使用@連接列表,但是如何從列表中提取每個元素?

我們還可以使用類似map或數組的東西來存儲這些列表值並將它傳遞給SML中的不同函數嗎?

我只能找到一些關於地圖的模糊信息,沒有關於我們如何使用它的確切信息。

回答

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明確的情況下閱讀。),但它顯示瞭如何映射使用 - 您指定的每個元素從源映射功能到目標域,給它一個源域中的元素列表,並返回目標域中的列表。

當然,這些都沒有就地更新列表,他們返回新的列表。

+0

你能告訴我,如果我真的可以繞過這個名單嗎?在上面的案例中,它是否爲'a',其中包含列表[「AA」,「AB」,「AC」]?傳遞我的意思是如果一個函數add調用addString函數將值a傳遞給add函數? – JJunior 2010-11-24 01:01:56