mirror of
https://github.com/kanaka/mal.git
synced 2024-11-10 12:47:45 +03:00
21 lines
685 B
Common Lisp
21 lines
685 B
Common Lisp
(defpackage :utils
|
|
(:use :common-lisp)
|
|
(:export :replace-all))
|
|
|
|
(in-package :utils)
|
|
|
|
(defun replace-all (string part replacement &key (test #'char=))
|
|
"Returns a new string in which all the occurences of the part
|
|
is replaced with replacement."
|
|
(with-output-to-string (out)
|
|
(loop with part-length = (length part)
|
|
for old-pos = 0 then (+ pos part-length)
|
|
for pos = (search part string
|
|
:start2 old-pos
|
|
:test test)
|
|
do (write-string string out
|
|
:start old-pos
|
|
:end (or pos (length string)))
|
|
when pos do (write-string replacement out)
|
|
while pos)))
|