Guest User

Untitled

a guest
Jul 17th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.15 KB | None | 0 0
  1.     1 (defclass name () ())
  2.     2                                                                                                                                
  3.     3 (defclass american-name (name)
  4.     4   ((first-name
  5.     5      :initarg :first-name
  6.     6      :accessor first-name)
  7.     7     (middle-init
  8.     8       :initarg :middle-init
  9.     9       :accessor middle-init)
  10.    10     (last-name
  11.    11       :initarg :last-name
  12.    12       :accessor last-name)))
  13.    13      
  14.    14 (defclass international-name (name)
  15.    15   ((given-names
  16.    16       :initarg :given-names
  17.    17       :accessor given-names
  18.    18       :type (list))
  19.    19   (family-names
  20.    20      :initarg :family-names
  21.    21      :accessor family-names
  22.    22      :type (list))))
  23.    23      
  24.    24 (defclass person ()
  25.    25   ((name
  26.    26      :initarg :name
  27.    27      :documentation "Name object")
  28.    28     (age
  29.    29       :initarg :age
  30.    30       :initform 0
  31.    31       :accessor age
  32.    32       :documentation "Person's age")
  33.    33     (likes
  34.    34       :initarg :likes
  35.    35       :initform nil
  36.    36       :accessor likes
  37.    37       :type (list)
  38.    38       :documentation "List of Name objects that person likes")))
  39.    39      
  40.    40 (defun new-american (fname minit lname)
  41.    41   "Creates a new american-name"
  42.    42   (make-instance 'american-name :first-name fname :middle-init minit :last-name lname))
  43.    43  
  44.    44 (defun new-international (f-names g-names)
  45.    45   "Creates a new international-name.  Names must be of type (list)."
  46.    46   (make-instance 'international-name :family-names f-names :given-names g-names))
  47.    47  
  48.    48 (defmethod print-object ((object american-name) stream)
  49.    49   (print-unreadable-object (object stream :type t)
  50.    50     (with-slots (first-name middle-init last-name) object
  51.    51       (format stream "~A ~A ~A" first-name middle-init last-name))))
  52.    52      
  53.    53 (defmethod print-object ((object international-name) stream)
  54.    54   (print-unreadable-object (object stream :type t)
  55.    55     (with-slots (family-names given-names) object
  56.    56       (format stream "~{~A~^ ~} ~{~A~^-~}" family-names given-names))))
Add Comment
Please, Sign In to add comment