#  Re: split-sequence
vit01 (mira, 1) → Andrew Lobanov  –  04:28:07 2016-01-02

Так или иначе, попробовал набросать подобную функцию сам.
Скорее всего, это г...код, но всё же:

====
(defun split (str delimiter &key (save-empty nil))
(setq delimiter (coerce delimiter 'character))
(let ((result nil) (len (length str)) (j 0) (toappend ""))
(dotimes (i len)
(if (char= (char str i) delimiter)
(progn
(setq toappend (subseq str j i))
(setq result (append result (list toappend)))
(setq j (1+ i))
; если разделитель в конце, добавляем пустоту
(if (= i (1- len)) (setq result (append result (list "")))))
(if (= i (1- len))
(setq result (append result (list (subseq str j len)))))))

(if (equal save-empty nil) ; убираем пустые строки, если они не нужны
(setq result (loop for s in result when (not (string= s "")) collect s)))
result))

(defun dotest (vals)
(dolist (s vals) (print (apply #'split (eval s)))))

(dotest '((list "/x/features/" "/") ; проверяем, что всё верно работает
(list "/ffggg/kikj//kjjj///" "/" :save-empty t)
(list "x/features" "/")))
====


// укажите кто-нибудь на недочёты, пожалуйста