17 травня 2012

Scheme: explode-on-char

Просто так, буду складувати сюди свої дрібні куски коду, які можуть мені колись знадобитися. Але саме цей (розрізання рядка по літері) навряд знадобиться, адже набагато зручніше та (в інтерпретаторах) ефективніше користатися регулярками.

(define (explode-on-char glue s)
  (let loop ((r '())
             (end (string-length s))
	     (i (- (string-length s) 1)))
     (if (= i 0)
         (if (eq? (string-ref s 0) glue)
             `("" ,(substring s 1 end) ,@r)
             `(,(substring s i end) ,@r))
         (if (eq? (string-ref s i) glue)
             (loop (cons (substring s (+ i 1) end) r)
	       i
	       (- i 1))
             (loop r end (- i 1))))))

Використовується так:

(explode-on-char #\: "Hello:world!:How:are:you?")

Але краще робити так:

(require 'regex)
(regex-split ":" "Hello:world!:How:are:you?")

0 коментарів | Коментувати