Как объединить список строк в ATS?
В основном, то, что я хочу, это функция следующего интерфейса:
fun stringlst2string (list0(string)): string
где stringlst2string принимает список строк и возвращает их конкатенацию.
2 ответа
Можно использовать стандартную библиотечную функцию stringlst_concat
чтобы сделать это. См. Ссылку для объяснения и этот фрагмент для рабочего примера.
Можно легко делать такие вещи (то есть превращать одну форму последовательности в другую форму последовательности), проходя через линейные потоки. Например, следующий код превращает список строк в поток строк, затем в поток потоков (символов) и затем в поток символов, а затем в строку:
fun
stringlst2string
(
xs: list0(string)
) : string =
strptr2string
(
string_make_stream_vt
(
stream_vt_concat
((streamize_list0_elt(xs)).map(TYPE{stream_vt(charNZ)})(lam x => streamize_string_char(x)))
)
)
Это очень бережная реализация с точки зрения использования памяти, и нет памяти, которая не освобождается в конце (за исключением памяти, необходимой для хранения возвращаемой строки). Ясно, что тот же подход применяется, если вы хотите объединить массив строк.