Inheritance/Single: Difference between revisions

Content deleted Content added
Kazinator (talk | contribs)
Line 1,703:
<lang txr>(defstruct animal nil
name
(:method get-name (me)
(if me.name me.name (error `get-name: animal @me has no name`))))
(lambda (me)
(:method (lambdaspeak (me stream)
(if me.name me.name (error `get-name: animal @me has no name`))))
(error "abstract animal cannot speak"))))
(speak
(lambda (me stream)
(error "abstract animal cannot speak"))))
 
(defstruct dog animal
(:method speak (me : (stream *stdout*))
(speak
(lambdaput-line `@{me.(me get-name)}: (bark!` stream *stdout*)))
(put-line `@{me.(get-name)}: bark!` stream))))
 
(defstruct cat animal
(speak:method (lambdaspeak (me : (stream *stdout*))
(put-line `@{me.(get-name)}: meow!` stream))))
 
(defstruct lab dog)