types.lisp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. ;;;; types.lisp
  2. ;;;;
  3. ;;;; Copyright (c) 2020 Samuel W. Flint <swflint@flintfam.org>
  4. (in-package #:lcsp)
  5. ;;; "lcsp" goes here.
  6. (defclass <csp> ()
  7. ((name :reader name
  8. :type 'symbol
  9. :initarg :name)
  10. (variables :reader variables
  11. :type 'list
  12. :initarg :variables)
  13. (constraints :reader constraints
  14. :type 'list
  15. :initarg :constraints)
  16. (constraint-checks :accessor constraint-checks
  17. :type 'integer
  18. :initform 0)))
  19. (defclass <variable> ()
  20. ((name :accessor name
  21. :type 'symbol
  22. :initarg :name)
  23. (type :accessor var-type
  24. :type 'type-specifier
  25. :initarg :type)
  26. (domain :accessor domain)
  27. (constraints-map :accessor constraints
  28. :type list
  29. :initarg :constraints-map)))
  30. (defclass <constraint> ()
  31. ((adicity :reader constraint-adicity
  32. :type 'integer)
  33. (variables :reader variables
  34. :initarg :variables
  35. :type list)
  36. (problem :reader problem
  37. :initarg :problem
  38. :type '<csp>)))
  39. (defmethod initialize-instance :after
  40. ((instance <constraint>) &key &allow-other-keys)
  41. (with-slots (variables adicity) instance
  42. (setf adicity (length variables))))
  43. (defgeneric check-constraint (constraint vvps &key suppress-cc-update-p))
  44. (defclass <constraint-extension> (<constraint>)
  45. ((conflictsp :reader conflictsp
  46. :initarg :conflictsp)
  47. (constraints-list :reader constraints-list
  48. :initarg :list)))
  49. (defclass <constraint-intension> (<constraint>)
  50. ((function :reader constraint-function
  51. :initarg :constraint-function)))
  52. (defclass <constraint-combined> (<constraint>)
  53. ((constraints :reader constraints
  54. :initarg constraints)))
  55. ;;; End lcsp