From 23d2d07b1a6cbbc7c96f1926e226316302596e6a Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Wed, 30 Nov 2022 10:58:30 +0300 Subject: [PATCH] Add Racket-like string-replace function --- embddr/common.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/embddr/common.scm b/embddr/common.scm index e469478..47d3dff 100644 --- a/embddr/common.scm +++ b/embddr/common.scm @@ -16,6 +16,7 @@ string-c-radix->number has-duplicates? find-duplicates insert-between + string-replace-text make-mux-selectors)) (else @@ -174,3 +175,18 @@ lst (cons* (car lst) x (insert-between (cdr lst) x)))) + +;;; Racket-like string-replace +(define* (string-replace-text str from to #:key (all #t)) + (let ((flen (string-length from)) + (tlen (string-length to))) + (let replace ((str str) (idx 0)) + (if (>= idx (string-length str)) + str + (let ((occ (string-contains str from idx))) + (if occ + (let ((str (string-replace str to occ (+ occ flen)))) + (if all + (replace str (+ occ tlen 1)) + str)) + str))))))