#!/usr/local/bin/guile-oops \ -e main -s !# ;;; $Id: methcall.guile,v 1.4 2001/05/27 17:33:15 doug Exp $ ;;; http://www.bagley.org/~doug/shootout/ ;;; from: Benedikt Rosenau (use-modules (oop goops)) (define-method (print-bool (b <boolean>)) (display (if b "true\n" "false\n"))) (define-class <toggle> () (state #:getter value? #:init-keyword #:state)) (define-class <nth-toggle> (<toggle>) (count-max #:init-keyword #:count-max) (counter #:init-value 0)) (define-method (activate! (t <toggle>)) (slot-set! t 'state (not (slot-ref t 'state))) t) (define-method (activate! (n-t <nth-toggle>)) (let ((counter (+ 1 (slot-ref n-t 'counter)))) (slot-set! n-t 'counter counter) (if (>= counter (slot-ref n-t 'count-max)) (begin (slot-set! n-t 'state (not (slot-ref n-t 'state))) (slot-set! n-t 'counter 0))) n-t)) (define-method (main (l <list>)) (let ((n (catch #t (lambda () (string->number (cadr l))) (lambda ex 1)))) (let ((tog (make <toggle> #:state #t))) (do ((i 1 (+ i 1))) ((= i n)) (value? (activate! tog))) (print-bool (value? (activate! tog)))) (let ((ntog (make <nth-toggle> #:state #t #:count-max 3))) (do ((i 1 (+ i 1))) ((= i n)) (value? (activate! ntog))) (print-bool (value? (activate! ntog))))))