#lang racket ;;; Simple version (numbers only, ascending order only) (define (insert k lst) (cond ((null? lst) (list k)) ((< k (car lst)) (cons k lst)) (#t (cons (car lst) (insert k (cdr lst)))))) (define (isort lst) (if (null? lst) '() (insert (car lst) (isort (cdr lst))))) (display "Simple insert")(newline) (insert 1 '()) (insert 1 '(2 3 4)) (insert 5 '(2 3 4)) (insert 3 '(2 3 4)) (display "Simple sorting")(newline) (isort '()) (isort '(1)) (isort '(1 2 3 4)) (isort '(4 3 2 1)) (isort '(2 1 4 1)) ;;; Generic version with functional comparison operator (define (insert2 k lst cmpfun) (cond ((null? lst) (list k)) ((cmpfun k (car lst)) (cons k lst)) (#t (cons (car lst) (insert2 k (cdr lst) cmpfun))))) (define (isort2 lst cmpfun) (if (null? lst) '() (insert2 (car lst) (isort2 (cdr lst) cmpfun) cmpfun))) (define (intalnumstring e1)1 (number->string e2))) (display "Generic insert")(newline) (insert2 1 '() >) (insert2 1 '(2 3 4) <) (insert2 5 '(2 3 4) <) (insert2 3 '(2 3 4) <) (display "Generic sorting")(newline) (isort2 '() >) (isort2 '(1) <) (isort2 '(1 2 3 4) >) (isort2 '(4 3 2 1) <) (isort2 '(2 1 4 1) >) (isort2 '("hier" "stehen" "strings" "und" "die" "sind" "sortierbar") string