From c480470123f3d9d05987fe64664adddf00066a00 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 9 May 2018 13:41:39 -0400 Subject: [PATCH] Issue #55 - parse out read and imag for complex --- scheme/read.sld | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/scheme/read.sld b/scheme/read.sld index 06f053b6..6b66d5ec 100644 --- a/scheme/read.sld +++ b/scheme/read.sld @@ -175,17 +175,27 @@ ((string? t) ;; Special case: complex number (let* ((end (vector-ref token 1)) (len (string-length t)) + (only-imag? (= (+ 1 end) len)) ;; EG: "57i" with no real component + (real-str (if only-imag? + "0" + (substring t 0 end))) + (imag-str (if only-imag? + (substring t 0 end) + (substring t end (- len 1)))) + (real (string->number real-str)) + (imag (string->number imag-str)) ) - (if (= (+ 1 end) len) + #;(if (= (+ 1 end) len) (let ((real "0") (imag (substring t 0 end))) ;; Only an imag part (write `(DEBUG ,t ,end ,len real ,(string->number real) imag ,(string->number imag)))) (let ((real (substring t 0 end)) - (imag (substring t (+ 1 end) (- len 1)))) + (imag (substring t end (- len 1)))) (if (= 0 (string-length imag)) (set! imag "1")) - (write `(DEBUG ,t ,end ,len real ,(string->number real) imag ,(string->number imag)))))) - t) + (write `(DEBUG ,t ,end ,len real ,(string->number real) imag ,(string->number imag))))) + ;; TODO: actually do (make-rectangular real imag) or equivalent, instead of this debug result: + (list t only-imag? end real imag))) (else (error "Unexpected token" t))))) ((= (vector-length token) 1) ;; Special case: error