Advertisement
triclops200

Quicksort, lisp

Jun 28th, 2012
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.56 KB | None | 0 0
  1. (define sum (lambda (xs) (sum_h xs 0)))
  2. (define sum_h (lambda (xs x) (cond
  3.     ((equal? xs '())
  4.         x
  5.     )
  6.     (#t
  7.         (sum_h (cdr xs) (+ x (car xs)))
  8.     )
  9.     )
  10. ))
  11. (define range (lambda (n m) (range_h n m '())))
  12. (define range_h (lambda (n m xs) (cond
  13.     ((>= n (+ m 1))
  14.         xs
  15.     )
  16.     (#t
  17.         (range_h  n  (- m 1) (cons m xs))
  18.     )
  19.     )
  20. ))
  21. (define rangestep (lambda (n m x) (rangestep_h n m x '())))
  22. (define rangestep_h (lambda (n m x xs) (cond
  23.     ((>= n (+ m 1))
  24.         xs
  25.     )
  26.     (#t
  27.         (rangestep_h (+ n x) m x (append xs (list n)))
  28.     )
  29.     )
  30. ))
  31. (define part (lambda (fu xs) (part_h fu xs '() '())))
  32. (define part_h (lambda (fu xs xss xsn) (cond
  33.     ((equal? xs '())
  34.         (list xss xsn)
  35.     )
  36.     (#t
  37.         (cond
  38.             ((fu (car xs))
  39.                 (part_h fu (cdr xs) (append xss (list (car xs))) xsn)
  40.             )
  41.             (#t
  42.                 (part_h fu (cdr xs) xss (append xsn (list (car xs))))
  43.             )
  44.         )
  45.     )
  46.     )
  47. ))
  48. (define filter (lambda (fu xs) (filter_h fu xs '())))
  49. (define filter_h (lambda (fu xs xss) (cond
  50.     ((equal? xs '())
  51.         xss
  52.     )
  53.     (#t
  54.         (cond
  55.             ((fu (car xs))
  56.                 (filter_h fu (cdr xs) (append xss (list (car xs))))
  57.             )
  58.             (#t
  59.                 (filter_h fu (cdr xs) xss)
  60.             )
  61.         )
  62.     )
  63.     )
  64. ))
  65. (define quicksort (lambda(xs) (cond
  66.     ((equal? xs '())
  67.         '()
  68.     )
  69.     (#t
  70.         (let ((v (car xs)))
  71.             (let ((prt (part (lambda (n) (< n v)) (cdr xs))))
  72.                 (let ((lss (car prt))  (mre (car (cdr prt))))
  73.                     (append
  74.                         (quicksort lss)
  75.                         (list v)
  76.                         (quicksort mre)
  77.                     )
  78.                 )
  79.             )      
  80.         )
  81.     )
  82.     )
  83. ))
  84. (let ((li (map (lambda(n) (- n)) (range 0 10))) )
  85. (display li)
  86. (newline)
  87. (display  (quicksort li))
  88. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement