(defun qsort (input predicate)
(if input
(let* ((pivot (first input))
(rest (rest input))
(lesser (remove-if-not #'(lambda (x)
(funcall predicate x pivot))
rest))
(greater (remove-if-not #'(lambda (x)
(not (funcall predicate x pivot)))
rest)))
(append (qsort lesser predicate)
(list pivot)
(qsort greater predicate)))
nil))
(format t "~a~%" (qsort '(9 8 5 6 7 2 3 1 4) #'<))
KGRlZnVuIHFzb3J0IChpbnB1dCBwcmVkaWNhdGUpCiAgKGlmIGlucHV0CiAgICAobGV0KiAoKHBpdm90IChmaXJzdCBpbnB1dCkpCiAgICAgICAgICAgKHJlc3QgKHJlc3QgaW5wdXQpKQogICAgICAgICAgIChsZXNzZXIgKHJlbW92ZS1pZi1ub3QgIycobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIHByZWRpY2F0ZSB4IHBpdm90KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3QpKQogICAgICAgICAgIChncmVhdGVyIChyZW1vdmUtaWYtbm90ICMnKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoZnVuY2FsbCBwcmVkaWNhdGUgeCBwaXZvdCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3QpKSkKICAgICAgKGFwcGVuZCAocXNvcnQgbGVzc2VyIHByZWRpY2F0ZSkKICAgICAgICAgICAgICAobGlzdCBwaXZvdCkKICAgICAgICAgICAgICAocXNvcnQgZ3JlYXRlciBwcmVkaWNhdGUpKSkKICAgIG5pbCkpCiAgICAgICAgICAgICAgCihmb3JtYXQgdCAifmF+JSIgKHFzb3J0ICcoOSA4IDUgNiA3IDIgMyAxIDQpICMnPCkp