Есть ли функция, соединяющая строку с разделительной строкой? - программирование
Подтвердить что ты не робот

Есть ли функция, соединяющая строку с разделительной строкой?

Есть ли функция в Emacs Lisp, которая выполняет обратную сторону split-string, т.е. объединяет элементы списка в строку, ограниченную данным разделителем? Другими словами, существует ли функция, предоставляющая список, например. ("foo" "bar" "baz") и разделитель, например. ", ", возвращает этот список как строку, ограниченную этим разделителем, например. "foo, bar, baz".

Общий Lisp, похоже, имеет такую ​​функцию, но функция с тем же именем в Emacs Lisp, format, является совершенно другой функцией.

4b9b3361

Ответ 1

Я думаю, что вы ищете mapconcat:

mapconcat применяет функцию к каждому элементу последовательности: результаты, которые должны быть строками, объединены. Между каждой парой результатов строки mapconcat вставляет разделитель строк. Обычно разделитель содержит пробел или запятую или другую подходящую пунктуацию.

Ответ 2

Если вы сильно используете манипуляции с строками в своем Elisp, я рекомендую вам установить библиотеку s.el, которая имеет обширный и последовательный API для строк. Для вашей задачи у него есть функция s-join:

(s-join "+" '("abc" "def" "ghi")) ;; => "abc+def+ghi"
(s-join "\n" '("abc" "def" "ghi")) ;; => "abc\ndef\nghi"

Ответ 3

Emacs 25 имеет string-join:

(string-join '("one" "two" "three") ", ") ; ==> "one, two, three"

Ответ 4

В зависимости от того, что вы делаете, может быть улучшена функция, например, если вы создаете аргументы командной строки, используйте combine-and-quote-strings, который выполняет вашу работу.

(combine-and-quote-strings '("foo" "bar" "baz") ", ")
"foo, bar, baz"