30 - Functional#

str-split#

GitHub Link

(define (str-split str ch)
    (let ((len (string-length str)))
        (letrec
            ((split
                (lambda (a b)
                    (cond
                        ((>= b len) (if (= a b) '() (cons (substring str a b) '())))
                            ((char=? ch (string-ref str b)) (if (= a b)
                                (split (+ 1 a) (+ 1 b))
                                    (cons (substring str a b) (split b b))))
                                (else (split a (+ 1 b)))))))
                                    (split 0 0))))

my-str-split.scm#

(define (str-split-helper line str list)
    (cond
        ((string-null? line)
            (if (string-null? str)
                (reverse list)
                (reverse (const str line))))
        ((char=? (string-ref line 0) #\space)
            (if (string-null? str)
                (str-split-helper (string-tail line 1) str list)
                (str-split-helper (string-tail line 1 "" (cons str list))))
            (else
                (str-split-helper (string-tail line 1)
                    (string-append str (string-head line 1))
                    list))))
(define (str-split line) (str-split-helper line "" '())))

Variable Number of Arguments#

(define (perform . args) (display (car args))
    (newline) (display (cdr args)))
(define (perform action . args) (display action)
    (newline) (display args))