Как мне повторить список? - PullRequest
2 голосов
/ 23 ноября 2010

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

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

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

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

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

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

1 Ответ

1 голос
/ 23 ноября 2010

два простых способа сделать это:

- 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  

Вышеупомянутое использует сопоставление с образцом, чтобы уничтожить список, выполняет операцию, а затем снова создает список, повторяя по ходу дела.

Это немного проще (если, возможно, немного сложнее для чтения, чем явные случаи в addstring.), Но оно показывает, как используется map - вы указываете функцию, которая отображает каждый элемент из источника в целевой домен, дайте ему список элементов в исходном домене, и он вернет список в целевом домене.

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

...