Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (correct-number? s b)
- (define (iter xs b)
- (if (null? xs) (null? xs) (f (cond
- ((<= (char->integer (car xs)) (char->integer #\9))
- (- (char->integer (car xs)) (char->integer #\0)))
- ((<= (char->integer (car xs)) (char->integer #\Z))
- (+ (- (char->integer (car xs)) (char->integer #\A)) 10))
- ((<= (char->integer (car xs)) (char->integer #\z))
- (+ (- (char->integer (car xs)) (char->integer #\a)) 10)))
- (cdr xs) b)))
- (define (f x xs b)
- (if (< x b) (iter xs b) (< x b)))
- (iter (string->list s) b))
- (define (certain->decimal s b)
- (define (f1 n b k)
- (if (= n 1)
- k
- (f1 (- n 1) b (* k b))))
- (define (iter xs b k it)
- (if (null? xs)
- it
- (f (cond
- ((<= (char->integer (car xs)) (char->integer #\9)) (- (char->integer (car xs)) (char->integer #\0)))
- ((<= (char->integer (car xs)) (char->integer #\Z)) (+ (- (char->integer (car xs)) (char->integer #\A)) 10))
- ((<= (char->integer (car xs)) (char->integer #\z)) (+ (- (char->integer (car xs)) (char->integer #\a)) 10)))
- (cdr xs) b k it)))
- (define (f x xs b k it)
- (if (< x b)
- (iter xs b (quotient k b) (+ it (* x k)))
- 'number-conversion-error))
- (iter (string->list s) b (f1 (string-length s) b 1) 0))
- (define (decimal->certain d b)
- (define (f d b k)
- (if (< d b)
- k
- (f (quotient d b) b (* k b))))
- (define (iter xs d b k)
- (if (zero? k)
- (if (null? xs)
- "0"
- (list->string xs))
- (iter (append xs (list (cond
- ((<= (quotient d k) 9) (integer->char (+ (quotient d k) (char->integer #\0))))
- ((<= (quotient d k) 35) (integer->char (+ (- (quotient d k) 10) (char->integer #\a)))))))
- (remainder d k) b (quotient k b))))
- (if (< b 37)
- (iter '() d b (f d b 1))))
Advertisement
Add Comment
Please, Sign In to add comment