;;;; numeric-macros.scm -*- Scheme -*- ;;;; Kon Lovett, Mar '24 ;;;; Kon Lovett, Mar '20 ;;;; Kon Lovett, Aug '18 ;;;; Kon Lovett, Aug '10 ;; Issues ;; ;; - Way too many synonyms. (module numeric-macros (;export one? two? three? four? five? six? seven? eight? nine? ten? 1+ 1- ++ -- fx++ fx-- fp++ fp-- fl++ fl-- 1+! 1-! ++! --! fx++! fx--! fp++! fp--! fl++! fl--!) (import scheme) (import (chicken base)) (import (chicken fixnum)) (import (chicken flonum)) (import (chicken syntax)) (import (only miscmacros define-syntax-rule)) ;; (define-syntax one? (syntax-rules () ((one? ?n) (= 1 ?n)))) (define-syntax two? (syntax-rules () ((two? ?n) (= 2 ?n)))) (define-syntax three? (syntax-rules () ((three? ?n) (= 3 ?n)))) (define-syntax four? (syntax-rules () ((four? ?n) (= 4 ?n)))) (define-syntax five? (syntax-rules () ((five? ?n) (= 5 ?n)))) (define-syntax six? (syntax-rules () ((six? ?n) (= 6 ?n)))) (define-syntax seven? (syntax-rules () ((seven? ?n) (= 7 ?n)))) (define-syntax eight? (syntax-rules () ((eight? ?n) (= 8 ?n)))) (define-syntax nine? (syntax-rules () ((nine? ?n) (= 9 ?n)))) (define-syntax ten? (syntax-rules () ((ten? ?n) (= 10 ?n)))) ;;; Functional (define-syntax-rule (1+ ?n) (add1 ?n)) (define-syntax-rule (1- ?n) (sub1 ?n)) (define-syntax-rule (++ ?n) (1+ ?n)) (define-syntax-rule (-- ?n) (1- ?n)) (define-syntax-rule (fx++ ?n) (fx+ ?n 1)) (define-syntax-rule (fx-- ?n) (fx- ?n 1)) (define-syntax-rule (fp++ ?n) (fp+ ?n 1.0)) (define-syntax-rule (fp-- ?n) (fp- ?n 1.0)) (define-syntax-rule (fl++ ?n) (fp++ ?n)) (define-syntax-rule (fl-- ?n) (fp-- ?n)) ;;; Mutating (define-syntax-rule (1+! ?v) (begin (set! ?v (1+ ?v)) ?v)) (define-syntax-rule (1-! ?v) (begin (set! ?v (1- ?v)) ?v)) (define-syntax-rule (++! ?v) (1+! ?v)) (define-syntax-rule (--! ?v) (1-! ?v)) (define-syntax-rule (fx++! ?v) (begin (set! ?v (fx++ ?v)) ?v)) (define-syntax-rule (fx--! ?v) (begin (set! ?v (fx-- ?v)) ?v)) (define-syntax-rule (fp++! ?v) (begin (set! ?v (fp++ ?v)) ?v)) (define-syntax-rule (fp--! ?v) (begin (set! ?v (fp-- ?v)) ?v)) (define-syntax-rule (fl++! ?v) (fp++! ?v)) (define-syntax-rule (fl--! ?v) (fp--! ?v)) ) ;module numeric-macros