home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum3.lzh / LISP / object.lsp < prev    next >
Lisp/Scheme  |  1987-11-19  |  3KB  |  76 lines

  1. ; =================================================================
  2. ; File OBJECT.LSP -- object-oriented programming example for XLisp
  3. ; (Corrected version for XLisp 1.7 by Brad Christie @ 76167,1461)
  4. ; =================================================================
  5.  
  6. ; This is an example of using the object-oriented programming support in
  7. ; XLisp.  The example involves defining a class of objects representing
  8. ; dictionaries.  Each instance of this class will be a dictionary in
  9. ; which names and values can be stored.  There is also a facility for
  10. ; finding the values associated with names after they have been stored.
  11.  
  12.  
  13. ; Create the 'Dictionary' class and establish its instance variables  See
  14. ; page 14 of the XLisp 1.7 manual.  The variable 'entries' will point to
  15. ; an association list representing the entries in the dictionary instance.
  16. ; Note that the proper format for the :new message here is as follows:
  17. ;  (Class :new <ivars> <cvars> [<super-class>])
  18. ; <ivars> can be nil, but <cvars> MUST be non-nil!
  19.  
  20. (setq Dictionary (Class :new '(entries) '(dummy)))
  21.  
  22.  
  23. ; Setup the method for the 'isnew' initialization message.
  24. ; This message will be send whenever a new instance of the 'Dictionary'
  25. ; class is created.  Its purpose is to allow the new instance to be
  26. ; initialized before any other messages are sent to it.  It sets the value
  27. ; of 'entries' to nil to indicate that the dictionary is empty.
  28.  
  29. (Dictionary :answer :isnew '()
  30.   '((setq entries nil) self))
  31.  
  32.  
  33. ; Define the message 'add' to make a new entry in the dictionary.  This
  34. ; message takes two arguments.  The argument 'name' specifies the name
  35. ; of the new entry; the argument 'value' specifies the value to be
  36. ; associated with that name.
  37.  
  38. (Dictionary :answer :add '(name value)
  39.   '((setq entries (cons (cons name value) entries)) value))
  40.  
  41.  
  42. ; Create an instance of the 'Dictionary' class.  This instance is an empty
  43. ; dictionary to which words may be added.
  44.  
  45. (setq d (Dictionary :new))
  46.  
  47.  
  48. ; Add some entries to the new dictionary.
  49.  
  50. (d :add 'mozart  'composer)
  51. (d :add 'winston 'computer-scientist)
  52.  
  53.  
  54. ; Define a message to find entries in a dictionary.  This message takes
  55. ; one argument 'name' which specifies the name of the entry for which to
  56. ; search.  It returns the value associated with the entry if one is
  57. ; present in the dictionary.  Otherwise, it returns nil.
  58.  
  59. (Dictionary :answer :find '(name &aux entry)
  60.     '((cond ((setq entry (assoc name entries))
  61.              (cdr entry))
  62.             (t nil))))
  63.  
  64.  
  65. ; Try to find some entries in the dictionary we created:
  66.  
  67. (d :find 'mozart)
  68. (d :find 'winston)
  69. (d :find 'bozo)
  70.  
  71.  
  72. ; The names 'mozart' and 'winston' are found in the dictionary so their
  73. ; values 'composer' and 'computer-scientist' are returned.  The name 'bozo'
  74. ; is not found so nil is returned in this case.
  75.  
  76.