TweetFollow Us on Twitter

Lisp Objects
Volume Number:4
Issue Number:4
Column Tag:Learning Lisp

Lisp Objects: Ford vs Chevy

By Didier Guillon, Grenoble, France

Didier Guillon is a former restaurant manager, currently in the fourth year of a Computer Science program at Grenoble University in France. He is a member of AAAI and works in artificial intelligence as a consultant at the Medical University of Grenoble’s department of BioStatistics. He is also president of Mac Alpes, a club of Macintosh developers in Grenoble and has been using the Mac for two years.

Welcome to this new column. When I first started Macintosh programming, MacTutor and the contributing editors were there and helped me since issue number one. Now I think it’s time to share with you the knowledge I gained with the “oldest new language”. So welcome to symbolic computation... you have a problem? No, don’t be frightened, I have been so pleased when I discovered ABC’ s of C that I wanted to introduce you to the Lisp world in a gentle way. The technique I will use may sometimes be criticized by expert Lisp programmers...but do they remember their first steps?

Today I will present the object idea with a very dumb example and “how to” on the Macintosh. MacApp and MPW Pascal are there to let us remember that object programming becomes a reality day after day. But, since Smalltalk, no other language than Common Lisp did it with better efficiency.

My Kingdom for an Object

But what is an object ? To the outside world, an object is an entity. But for us programmers, an object is some private memory with a set of operations. An object can be a number, a square, a text editor. An object which is a square knows a lot of information about itself: how to calculate the area of the square, the center of the square... When we want the object ‘square’ to carry out such a calculation, we send him a message (we say: to invoke). But we just tell him which operation we want, not how to operate. (If he’s smart, he already knows that!)

When a set of objects represents the same kind of information, we implement a class with a data structure and the procedures that operate on this data structure. For example, a class implemented for a rectangle would know how a specific object, called an instance, would carry out the operation rectangular area. This instance has private variables called instance variables and the function that will operate on the instance of a particular class is call a method. We just defined in fact the fundamental concepts of object programming: data abstraction, information hiding (not to tell “how to”) and generic operation. But all this is just theory, so let’s start with our dumb example. We will use the ExperCommonLisp (ECL) from ExperTelligence™, who since the last review of this language in MacTutor, did a lot of improvement and removed many bugs.

First, let’s create a class for ‘cars’ (note: we wrote cars to avoid the “car” word which is a Lisp reserved word).

(defclass (cars object)
  (IVS (color ‘blue)
       (price 0)))

Defclass contains a list with the name of the call and the name of the superclass. In ECL all the classes come from a special class called object. In fact object is a root class from which all classes are derived. The IVS stands for instance variable and as we saw previously, will manage to store the IVS in each instance. You note the quote before blue? In Lisp every elementary object, called an atom, is evaluated. This evaluation returns a function name or the value attached to this specific atom. So, to prevent evaluation, we “quote” the atom which becomes itself a value and is attached to the instance variable color. This ‘quoting’ is not necessary for a numeric value. Then we define the method (using defmethod followed by the name of the class and the name of the method itself):

(defmethod (cars small) ()
 (setq price 800)
 (format T “A small car is just fun for ~a  dollars.~%” price))

This method is doing two things: setting price to 800 with setq, a Lisp word which will not evaluate the following word, price, and sets its value to 800 (for Pascal programmers it’s an assignment). Then it prints a message (good old Fortran world !!!). You are now able to trace by yourself what the second method does:

(defmethod (cars race) ()
 (setq color ‘red)
 (setq price 20000)
 (format T “A wonderful race car whose color is ~a.~%” color))

Now we link up what we define to this first class: we compile and define an instance (we will represent the return value by ->):

(setq my1car (cars ‘new))
-> #<CARS INSTANCE $5402341A>

“my1car” is the instance which holds a copy of the class ‘cars’. Let’s invoke the instance in various ways :

(my1car ‘race)
-> A wonderful race car whose color is RED.

(my1car ‘small)
-> A small car is just fun for 800 dollars.

(my1car ‘price)
-> 800

(my1car ‘price 200)
-> 200

(my1car ‘price)
-> 200

We can see the graphic image of the object we define, including the next subclass we will create:

Here is the subclass Ferrari:

(defclass (Ferrari cars)
 (IVS a_speed))

(defmethod (cars buy_a_Ferrari) ()
 (setq a_speed 200)
 (self ‘race)
 (format T “But when you drive at ~a miles... Whoo !!!!~%”    a_speed 
) )

Same as the ‘cars’ object, but note the “self” word which is used to invoke the method race from the method buy_a_Ferrari. As previously, we can say:

(setq I_buy_a_Ferrari (Ferrari ‘new))
-> #<FERRARI INSTANCE $540233AA>

(I_buy_a_Ferrari ‘buy_a_Ferrari)
-> A wonderful race car whose color is RED.

But when you drive at 200 miles... Whoo !!!!

(I_buy_a_Ferrari ‘price)
-> 20000

(I_buy_a_Ferrari ‘color)
-> RED

We can see easily that I_buy_a_Ferrari inherits from its superclass ‘cars’ all the methods and instance variables. We will not cover here some other concepts like class variables, super....

So now that we have an idea on how objects live, we’ll have a look at ECL. In ECL, the object idea has been expanded to the Macintosh Toolbox.

Before going on to the Macintosh toolbox, we have a look at another object expression, metamethod. A metamethod is a procedure which is invoked by sending an appropriate message to a class. We explain metamethod because on the Macintosh we create a NEW metamethod which sets up the required data structure. When invoking a specific metamethod, the instance of a particular class will have instance variables which will correlate (and with the same name) to the equivalent fields in the Pascal data structure. An example from QuickDraw:

(setq yourRect (Rect ‘new 30 40 250 280))

We just created the instance call ‘yourRect’ with a set of parameters. If we send it a message, we can access these instance accessors by the same name as in the Pascal structure : top, left, bottom, right.

(yourRect ‘bottom)
-> 250

or change their value :

(yourRect ‘left 60)
-> 60

We can also draw, calling Toolbox procedures with the instance ‘yourRect’ :

(!PaintRect yourRect)

Note that trap names are prefixed by an exclamation mark. We are now ready to start programming our first minimum shell in ECL... but that’s for next month.

For those interested in following me, and starting Lisp, I recommend the very nice and easy book of Touretzky “A Gentle Introduction to Symbolic Computation”. For the others, obviously, Lisp 2e by Winston is a must. I intend to present the next coming months various aspects of Lisp programming in Artificial Intelligence, but also use some special languages as OPS 5, SmallTalk, Humble, Prolog (or why not Nexpert, just to let us dream...). If you have any suggestions, please contact me :

Didier Guillon

8 Impasse Saint Jean

38240 Meylan

France.

The complete program :

(defclass (cars object)
 (IVS (color ‘blue)
         (price 0)))

(defmethod (cars small) ()
 (setq price 800)
 (format T “A small car is just fun for ~a  dollars.~%” price))


(defmethod (cars race) ()
 (setq color ‘red)
 (setq price 20000)
 (format T “A wonderful race car whose color  is ~a.~%” color))

;**********Examples*****************

;(setq my1car (cars ‘new))
;#<CARS INSTANCE $5402341A>
;(my1car ‘race)
;A wonderful race car whose color is RED.
;(my1car ‘small)
;A small car is just fun for 800 dollars.
;(my1car ‘price)
;800
;(my1car ‘price 200)
;200
;(my1car ‘price)
;200

;**********Second class**************

(defclass (Ferrari cars)
  (IVS a_speed))

(defmethod (Ferrari buy_a_Ferrari) ()
   (setq a_speed 200)
   (self ‘race)
 (format T “But when you drive at ~a miles ...  Whoo !!!!~%”         
                              a_speed))

;***********Example****************

;(setq I_buy_a_Ferrari (Ferrari ‘new))
;#<FERRARI INSTANCE $540233AA>

;(I_buy_a_Ferrari ‘buy_a_Ferrari)
;A wonderful race car whose color is RED.
;But when you drive at 200 miles... Whoo !!!!

;(I_buy_a_Ferrari ‘price)
;20000

;(I_buy_a_Ferrari ‘color)
;RED
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

How to evolve Eevee in Pokemon GO
By now, almost everyone should be hip to how to evolve Pokemon in Pokemon GO (and if not, there's a guide for that). Just gather enough candy of the appropriate type, feed them all to the Pokemon, and evolution happens. It's a miracle that would... | Read more »
CSR Racing 2: Guide to all game modes
It might not seem like there are all that many ways to go fast in a straight line, but CSR Racing 2 begs to differ. [Read more] | Read more »
Bulb Boy (Games)
Bulb Boy 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Multi-award winning 2D point & click horror adventure about a boy with a glowing head. | Read more »
5 top free emoji keyboard apps
If we're not at peak emoji yet as a society, it feels like we definitely should be. The emoji concept has gone far beyond what anyone in Japan could have envisioned when the people there unleashed it on an unsuspecting world, but the West has... | Read more »
How to unlock more characters in Disney...
One of the big charms of Disney Emoji Blitz is seeing a wide variety of beloved Disney and Pixar characters transformed into smiling emojis. Even someone like the sneaky Randall from Monsters Inc., who probably never cracked a smile on film, is... | Read more »
Cubway (Games)
Cubway 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Cubway is a journey with an abstract story of lifecycle of rebirth, called Samsara. Guide the cube through the long way full of dangers... | Read more »
Colorcube (Games)
Colorcube 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Turn pieces and blend colours in this minimal yet visually stunning puzzler.Over 200 handcrafted and challenging levels. Features... | Read more »
Doodle God Griddlers (Games)
Doodle God Griddlers 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Crusader Kings: Chronicles (Games)
Crusader Kings: Chronicles 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Crusader Kings: Chronicles is an interactive text based game that puts you in the shoes of Guy de Rose as you make... | Read more »
Roads of Rome: New Generation (Games)
Roads of Rome: New Generation 1.0 Device: iOS Universal Category: Games Price: $5.99, Version: 1.0 (iTunes) Description: | Read more »

Price Scanner via MacPrices.net

Apple price trackers, updated continuously
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: - 15″... Read more
13-inch 2.5GHz MacBook Pro (Apple refurbished...
Apple has Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.5GHz MacBook Pros... Read more
21-inch iMacs on sale for up to $120 off MSRP
B&H Photo has 21″ iMacs on sale for up to $120 off MSRP including free shipping plus NY sales tax only: - 21″ 3.1GHz iMac 4K: $1379 $120 off MSRP - 21″ 2.8GHz iMac: $1199.99 $100 off MSRP - 21″ 1... Read more
Charitybuzz Set to Auction Unique Apple-1 Com...
Offering an opportunity to own the computer that sparked a revolution, on Monday, July 25, leading online charity auction platform Charitybuzz will auction what is claimed to be the world’s most... Read more
MacBook Airs on sale for up to $150 off MSRP
Amazon has 11″ and 13″ MacBook Airs on sale for up to $150 off MSRP for a limited time. Shipping is free: - 13″ 1.6GHz/128GB MacBook Air (sku MMGF2LL/A): $899.99 $100 off MSRP - 13″ 1.6GHz/256GB... Read more
Apple refurbished 13-inch Retina MacBook Pros...
Apple has Certified Refurbished 13″ Retina MacBook Pros available for up to $270 off the cost of new models. An Apple one-year warranty is included with each model, and shipping is free: - 13″ 2.7GHz... Read more
Apple refurbished 11-inch MacBook Airs availa...
Apple has Certified Refurbished 11″ MacBook Airs (the latest models), available for up to $170 off the cost of new models. An Apple one-year warranty is included with each MacBook, and shipping is... Read more
Apple iPad Pro Sales Far Outpacing Microsoft...
A report on Appleinsider notes that despite Microsoft Surface tablet PC sales growing by 9 percent year over year, revenues remained below $1 billion, and are down sequentially from the $1.1 billion... Read more
DEVONthink 2.9 Features Ultra-fast, Robust, A...
DEVONthink 2.9 allows users to keep databases synchronized using many means of transport. It transmits them between Macs on the local network or stores them in a syncable form on removable hard... Read more
12-inch WiFi Apple iPad Pros on sale for up t...
B&H Photo has 12″ WiFi iPad Pros on sale for up to $100 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 12″ Space Gray 32GB WiFi iPad Pro: $749 $50 off MSRP - 12″... Read more

Jobs Board

*Apple* Solutions Consultant - APPLE (United...
Job Summary As an Apple Solutions Consultant, you'll be the link between our future customers and our products. You'll showcase your entrepreneurial spirit as you Read more
*Apple* Professional Learning Specialist - A...
Job Summary The Apple Professional Learning Specialist is a full-time position for one year with Apple in the Phoenix, AZ area. This position requires a high Read more
*Apple* Picker - Apple Hill Orchard (United...
Apple Hill Orchard, Co. Rte. 21,Whitehall, NY 9/7/16-10/228/16. Pick fresh market or processing apples Productivity of 60 boxes and 80 boxes processing fruit per Read more
*Apple* Solutions Consultant - APPLE (United...
Job Summary As an Apple Solutions Consultant, you'll be the link between our future customers and our products. You'll showcase your entrepreneurial spirit as you Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.