Как перебрать список?

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

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

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

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

Также можем ли мы использовать что-то вроде карты или массивов для хранения этих значений списка и передачи их различным функциям в SML?

Я мог просто найти некоторую расплывчатую информацию о карте и никакой определенной информации о том, как мы можем ее использовать.


person JJunior    schedule 23.11.2010    source источник


Ответы (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.), но оно показывает, как используется карта — вы указываете функцию, которая отображает каждый элемент из источника в целевой домен, даете ему список элементов в исходном домене и возвращает список в целевом домене.

конечно, ни один из них не обновляет список на месте, они возвращают новый список.

person toshok    schedule 23.11.2010
comment
не могли бы вы сказать мне, могу ли я на самом деле передать этот список? Будет ли это «а» в приведенном выше случае, который содержит список [AA, AB, AC]? с пропуском я имею в виду, если функция add вызывает функцию addString, будет ли значение a передано в функцию добавления ?? - person JJunior; 24.11.2010