From f1f46133514e02d5a9e09548ce8f5d4b1aaf5b8c Mon Sep 17 00:00:00 2001 From: Edward L Platt Date: Mon, 19 Aug 2019 15:58:33 -0400 Subject: [PATCH] Add extend-sylvester-radix operator. --- sylvester-test.rkt | 8 ++++++++ sylvester.rkt | 21 +++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/sylvester-test.rkt b/sylvester-test.rkt index a260aaa..f639d1a 100644 --- a/sylvester-test.rkt +++ b/sylvester-test.rkt @@ -18,3 +18,11 @@ (check-equal? (add-sylvester-radix '(0 1 2) '(1 1 2)) '(1 2 4)) (check-equal? (add-sylvester-radix '(1) '(1)) '(0 1)) + +(check-equal? ((extend-sylvester-radix 4) '()) '(0 0 0 0)) +(check-equal? ((extend-sylvester-radix 3) '(1 1)) '(1 1 0)) +(check-equal? ((extend-sylvester-radix 2) '(1 1)) '(1 1)) +(check-equal? ((extend-sylvester-radix 1) '(1 1)) '(1 1)) + + + diff --git a/sylvester.rkt b/sylvester.rkt index acde75b..bfda876 100644 --- a/sylvester.rkt +++ b/sylvester.rkt @@ -41,12 +41,19 @@ ;; 1337 sylvester-radix-value - ;; add two sylvester-radix numbers + ;; Add two sylvester-radix numbers ;; ;; Example: ;; > (add-sylvester-radix '(1 0 1) '(1 0 2)) ;; '(0 1 3) - add-sylvester-radix) + add-sylvester-radix + + ;; Extend length of sylvester-radix number with zero elements. + ;; + ;; Example: + ;; > ((extend-sylvester-radix 4) '(1 2)) + ;; '(1 2 0 0) + extend-sylvester-radix) ;; ————————————————————————————————— ;; Implementation Section @@ -73,6 +80,16 @@ (define (add-sylvester-radix v w) (normalize-sylvester-radix (add-components v w))) +;; Create procedure to extend list to length n +(define (extend-sylvester-radix n) + (lambda (v) + (if (>= (length v) n) + v + (append v + (build-list + (- n (length v)) + (lambda (x) 0)))))) + ;; Ensure digits are in the required range by carrying surplus value. (define (normalize-sylvester-radix v) (normalize-sylvester-helper v 0 0))