Как объединить список строк в 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)))
)
)

Это очень бережная реализация с точки зрения использования памяти, и нет памяти, которая не освобождается в конце (за исключением памяти, необходимой для хранения возвращаемой строки). Ясно, что тот же подход применяется, если вы хотите объединить массив строк.

Другие вопросы по тегам