[racket] Reading graph structure
On Aug 18, 2011, at 10:21 AM, Harry Spier wrote:
> I've done that and what displays is:
> #0=(1 . #0#)
> #0='(1 . #0#)
>
> Again I'm not clear why this doesn't try to produce an endlessly recurring (1 . (1 . ( 1 ....... list
At this point you're entering philosophical grounds:
is a cyclic list (ignoring how it is constructed) a good representation for the rational, infinite list of all 1s?
As far as my practical programming issues are concerned, I am perfectly happy with it.
Here is a snippet from a TicTacToe implementation that uses a cyclic list:
;; the class of ttt buttons
(define ttt%
(shared ((turn (cons "U, Man" (cons "I, Bot" turn))))
;; The above creates the 'infinite' list ("U, Man" . ("I, Bot" . ("U, Man" . ...)))
;; The first person on this list is the player whose turn it is.
;; You could create this list by reading the names off some input string.
(class button%
(field [status BLANK])
;; -> String
;; what is its status?
(define/public (is) status)
;; -> Void (effect: this button is taken by the current player)
(define/public (play)
(define who (car turn))
(when (and (send this is-enabled?) (string=? status BLANK))
(set! status who)
(send this set-label status)
(send this enable #f)
(when (N-in-a-row?)
(disable-all)
(send frame set-label (format "game's up: ~a won\n" who)))
(set! turn (cdr turn))))
;; this last line uses the infinite list to switch turns