(module number-parser-2 (main get-number-string)) ;; (define (get-number-string args) (let ((number-string (cadr args))) (print (parse2number number-string)) )) ;; On isole la procédure d'analyse proprement dite : (define (parse2number number-string) (let* ((regexp "^(\\+|-)?([0-9]*)(\\.([0-9]*))?(\\^((\\+|-)?[0-9]+))?$") (number-elems (pregexp-match regexp number-string)) ;; On localise les éléments qui seront utiles à la ;; construction du nombre et on leur donne des noms : (sign-num (cadr number-elems)) (int-part (caddr number-elems)) (point-part (cadddr number-elems)) (exponent (caddr (cddddr number-elems))) ;; si un élément donne #f on le remplace par la chaîne vide (mantissa (string-append (or sign-num "") int-part (or point-part "")))) (if exponent (list 'expt mantissa exponent) mantissa)))