[ create a new paste ] login | about

Link: http://codepad.org/thgRNCbo    [ raw code | output | fork ]

fisherro - Scheme, pasted on Aug 8:
(define input (string->list "rwbrwbrwb"))

(define (dnf1 cs)
  (define (char->num c)
    (case c
      ((#\r) 1)
      ((#\w) 2)
      ((#\b) 3)
      (else 0)))
  (sort cs (lambda (c1 c2)
             (< (char->num c1)
                (char->num c2)))))

(define (dnf2 cs)
  (let loop ((rest cs)
             (rs '())
             (ws '())
             (bs '()))
    (cond ((null? rest)
           (append rs ws bs))
          (else
            (let ((c (car rest)))
              (case c
                ((#\r) (loop (cdr rest)
                             (cons c rs)
                             ws
                             bs))
                ((#\w) (loop (cdr rest)
                             rs
                             (cons c ws)
                             bs))
                ((#\b) (loop (cdr rest)
                             rs
                             ws
                             (cons c bs)))
                (else (loop (cdr rest)
                            rs
                            ws
                            bs))))))))

;The codepad.org Scheme lacks the sort function
;(write (dnf1 input))
;(newline)
(write (dnf2 input))
(newline)


Output:
1
(#\r #\r #\r #\w #\w #\w #\b #\b #\b)


Create a new paste based on this one


Comments: