2010-11-23 2 views
2

Я пытаюсь выполнять операции с базовым списком с помощью SML.Как перечислить список?

Я хочу извлечь каждый элемент списка и добавить строку к этому элементу и добавить его обратно в список. Пример:

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

Как я могу перебирать каждый элемент в списке в SML? Я могу добавить строки, используя ^, и объединить списки, используя @, но как извлечь каждый элемент из списка?

Также мы можем использовать что-то вроде карты или массивов для хранения этих значений списка и передать их различным функциям в 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

Не могли бы вы рассказать мне, могу ли я действительно пройти этот список? Будет ли это «а» в приведенном выше случае, который содержит список [«AA», «AB», «AC»]? с проходом вокруг я имею в виду, если функция добавляет вызовы, функция addString будет передавать значение a в функцию добавления? – JJunior 2010-11-24 01:01:56