Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

scheme question

Name: Anonymous 2013-03-31 11:27

Hello /prog/, I'm not really much of a programmer but I've been dicking around with Lisp/Scheme lately for fun (DrRacket specifically).  One of the programs in my book goes like this:

;; move-circle : number circle  ->  circle
;; to draw and clear a circle, translate it by delta pixels
(define-struct circle (center radius color))

(define (move-circle delta a-circle)
  (cond
    [(draw-and-clear-circle a-circle) (translate-circle a-circle delta)]
    [else a-circle]))

draw-and-clear-circle draws and clears a circle, obviously, and translate-circle simply modifies the given "circle" structure such that its position is shifted by "delta" pixels.  So if I wanted to make a circle move across the screen I could run something like

(draw-a-circle (move-circle 10 (move-circle 10 (move-circle 10 (make-circle (make-posn 30 30) 45 'red)))))

Anyway my question is simply this: why is there an "else" at all in that conditional?  The function "draw-and-clear-circle" always returns a value of "true", or, if there's something wrong with the definition of the circle structure, an error.  So afaik the "else" would never come into play.

Name: Anonymous 2013-03-31 19:45

But if you wanted to do this with clos, you'd have to catch a bad multimethod call on the list class, and then pass the invoked multimethod and arguments onto the list contents. It might be possible, but I'm not sure how you would do it, since the rule would apply for all methods, but only on the list class. Smalltalk supports this.

Name: Anonymous 2013-03-31 19:52

>>18,19
This is interesting and I would like to pursue this discussion further, however I am currently under the effects of sleep deprivation. I will answer you after a short nap.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List