loop.scm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey
  3. (xodd? 10)
  4. (xodd? 5)
  5. (define-local-syntax (define-primitive id nargs)
  6. (let ((args (reverse (list-tail '(z y x) (- '3 nargs)))))
  7. `(define (,id . ,args)
  8. (call-primitively ,id . ,args))))
  9. (define-primitive + 2)
  10. (define-primitive - 2)
  11. (define-primitive * 2)
  12. (define-primitive < 2)
  13. (define-primitive = 2)
  14. (define (xodd? x)
  15. (cond ((= 0 x)
  16. #f)
  17. ((< 100 x) ; efficiency hack
  18. (goto odd? (- x 100)))
  19. ((< 1000 x) ; efficiency hack
  20. (goto xodd? (- x 100)))
  21. (else
  22. (goto xeven? (- x 1)))))
  23. (define (xeven? x)
  24. (cond ((= 0 x)
  25. #t)
  26. ((< 100 x) ; efficiency hack
  27. (goto xeven? (- x 100)))
  28. (else
  29. (goto xodd? (- x 1)))))
  30. (define (odd? x)
  31. (cond ((= 0 x)
  32. #f)
  33. ((< 100 x) ; efficiency hack
  34. (goto odd? (- x 100)))
  35. (else
  36. (goto even? (- x 1)))))
  37. (define (even? x)
  38. (cond ((= 0 x)
  39. #t)
  40. ((< 100 x) ; efficiency hack
  41. (goto even? (- x 100)))
  42. (else
  43. (goto odd? (- x 1)))))