Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. ;; -*- mode:lisp -*-
  2. (defun reduce-1 (f ls)
  3. (let ((memo nil))
  4. (labels ((reduce-2 (f ls)
  5. (if (null ls)
  6. memo
  7. (progn
  8. (setf memo (funcall f memo (car ls)))
  9. (reduce-2 f (cdr ls))))))
  10. (reduce-2 f (cdr ls))
  11. memo)))
  12.  
  13. (defun reduce (&rest args)
  14. (if (= (length args) 2)
  15. (apply #'reduce-1 args)
  16. (if (= (length args) 3)
  17. (funcall #'reduce-1 (car args) (append (list (elt args 2)) (elt args 1))))))
  18.  
  19. (defun remove (f ls)
  20. (reduce (lambda (memo item) (if (funcall f item) memo (cons item memo))) ls))
  21.  
  22. (defun acons (k v a) (cons (cons k v) a))
  23.  
  24. (defmacro defvar (variable value) `(defglobal ,variable ,value))
  25.  
  26. (defmacro defparameter (variable value) `(defglobal ,variable ,value))
  27.  
  28. (defun xassoc (key alist)
  29. (reduce (lambda (memo item)
  30. (if (equal key (car item))
  31. item
  32. memo))
  33. alist
  34. nil))
  35.  
  36. (defvar |x+y| '((((x . 1)). 1) (((y . 1)). 1)))
  37.  
  38. (defvar |2x^2+3y| '((((x . 2)) . 2) (((y . 1)). 3)))
  39.  
  40. (defun clone (ls)
  41. (if (not (consp ls)) ls
  42. (cons (clone (car ls))
  43. (clone (cdr ls)))))
  44.  
  45. (defun p (&rest args) (apply #'format (error-output) args))
  46.  
  47. (defun add (&rest ps)
  48. (let ((q nil))
  49. (labels ((add-1 (kv)
  50. (let* ((key (car kv))
  51. (value (cdr kv))
  52. (result (+ (or (and (xassoc key q) (cdr (xassoc key q))) 0) value)))
  53. (if (not (xassoc key q))
  54. (setf q (acons key result q))
  55. (setf (cdr (xassoc key q)) result)))))
  56. (mapc (lambda (p1) (mapc #'add-1 p1)) ps))
  57. q))
  58.  
  59. (p "ANS:~A~%" (add |x+y| |2x^2+3y|))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement