help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to describe something in Lisp?


From: Pascal J. Bourguignon
Subject: Re: How to describe something in Lisp?
Date: Tue, 03 Feb 2009 17:40:02 +0100
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.2 (gnu/linux)

Andreas Politz <politza@fh-trier.de> writes:

> Johan Andersson wrote:
>> Hi!
>> As a Java and Ruby programmer I sometimes find it hard to code
>> Lisp. Right
>> now I'm working on a minor mode for which the structure would obvious for me
>> in Java or Ruby, but in Lisp is a riddle.
>> I will not describe the mode itself, but give a description of the
>> problem.
>> Say I want to store a list of people in a file. And for each person, also
>> some information on them in the format:
>> name|age|married|sex
>> Each time I start the mode, that file should be parsed in to some
>> datastructure (which kind of is the problem). And on save, the file would be
>> updated. For me it's obvious to represent a person with a class:
>> [...]
>>  I read something about object orientation in lisp, but I have never
>> seen this be used in Emacs. So my question is basically: What is the best
>> way to model something in lisp, that you in an object oriented language
>> would model with a class.
>> Thanks!
>
> (defstruct person
> [...]

There is also EIEIO which is an implementation of CLOS, the Common
Lisp Object System, adapted for emacs.

You can find it part of http://cedet.sourceforge.net/

Then you can define your objects:

(require 'eieio)

(defclass person
  ((name       :type string :initarg :name      :accessor name)
   (birthdate  :type date   :initarg :birthdate :accessor birthdate))
   (status     :type marital-status :initarg  :martial-status :accessor 
martial-status)
   (sex        :type (member :male :female) :initarg :sex :accessor sex))

(defmethod age ((p person))
  (date- (now) (birthdate p)))

...

-- 
__Pascal Bourguignon__


reply via email to

[Prev in Thread] Current Thread [Next in Thread]