; string data type
(define (take n xs)
(let loop ((n n) (xs xs) (ys '()))
(if (or (zero? n) (null? xs))
(reverse ys)
(loop (- n 1) (cdr xs)
(cons (car xs) ys)))))
(define (drop n xs)
(let loop ((n n) (xs xs))
(if (or (zero? n) (null? xs)) xs
(loop (- n 1) (cdr xs)))))
(define string->str string->list)
(define str->string list->string)
(define s (string->str "Programming Praxis"))
(display s) (newline)
(display (str->string s)) (newline)
(define str-length length)
(define str-ref list-ref)
(define str-substring (case-lambda
((s start) (str-substring s start (+ (str-length s))))
((s start past) (take (- past start) (drop start s)))))
(display (str-length s)) (newline)
(display (str-ref s 8)) (newline)
(display (str-substring s 8)) (newline)
(display (str-substring s 8 13)) (newline)
(define str-concat append)
(display (str-concat
(string->str "Programming")
(string->str " ")
(string->str "Praxis")))