Add floating point/complex enumerator

This commit is contained in:
Max New 2013-11-10 12:01:12 -06:00
parent 6d02da0f2b
commit 46d3493b99
3 changed files with 53 additions and 10 deletions

View File

@ -5,6 +5,7 @@
(define deps '("scheme-lib" (define deps '("scheme-lib"
"base" "base"
"data-lib" "data-lib"
"math-lib"
"tex-table" "tex-table"
"profile-lib" "profile-lib"
"typed-racket-lib" "typed-racket-lib"

View File

@ -1,10 +1,14 @@
#lang racket/base #lang racket/base
(require racket/contract (require racket/bool
racket/contract
racket/function racket/function
racket/list racket/list
racket/math
racket/match racket/match
racket/set racket/set
math/flonum
"enumerator.rkt" "enumerator.rkt"
"env.rkt" "env.rkt"
"error.rkt" "error.rkt"
@ -243,19 +247,58 @@
string->list string->list
(many/e char/e))) (many/e char/e)))
(define from-1/e
(map/e add1
sub1
nats/e))
(define integer/e (define integer/e
(disj-sum/e #:alternate? #t (disj-sum/e #:alternate? #t
(cons nats/e (λ (n) (>= n 0))) (cons (const/e 0) zero?)
(cons (map/e (λ (n) (- (+ n 1))) (cons from-1/e (λ (n) (> n 0)))
(λ (n) (- (- n) 1)) (cons (map/e - - from-1/e)
nats/e)
(λ (n) (< n 0))))) (λ (n) (< n 0)))))
;; This is really annoying so I turned it off ;; The last 3 here are -inf.0, +inf.0 and +nan.0
(define real/e empty/e) ;; Consider moving those to the beginning
(define weird-flonums/e-p
(cons (from-list/e '(+inf.0 -inf.0 +nan.0))
(λ (n)
(and (flonum? n)
(or (infinite? n)
(nan? n))))))
(define normal-flonums/e-p
(cons (take/e (map/e
ordinal->flonum
flonum->ordinal
integer/e)
(+ 1 (* 2 9218868437227405311)))
(λ (n)
(and (flonum? n)
(nor (infinite? n)
(nan? n))))))
(define float/e
(disj-sum/e #:append? #t
weird-flonums/e-p
normal-flonums/e-p))
(define real/e
(disj-sum/e #:alternate? #t
(cons integer/e exact-integer?)
(cons float/e flonum?)))
(define non-real/e
(map/e make-rectangular
(λ (z)
(values (real-part z)
(imag-part z)))
real/e
(except/e real/e 0 0.0)))
(define num/e (define num/e
(sum/e integer/e (disj-sum/e #:alternate? #t
real/e)) (cons real/e real?)
(cons non-real/e complex?)))
(define bool/e (define bool/e
(from-list/e '(#t #f))) (from-list/e '(#t #f)))

View File

@ -31,7 +31,6 @@
(try-it 100 Base s) (try-it 100 Base s)
(try-it 100 Base nat) (try-it 100 Base nat)
(try-it 100 Base i) (try-it 100 Base i)
#;
(try-it 100 Base r) (try-it 100 Base r)
(try-it 2 Base b) (try-it 2 Base b)