blob: 25239a2dad7e20f4d717d8a3794c15dbcfe6ff52 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#lang racket
(provide full-parse)
; + - * / ^ ( ) [0-9]
(define (full-parse str)
(define (get-general expr operator next-operation)
(define (char->wanted c)
((if (char-numeric? c)
string->number string->symbol)
(string c)))
(define (add-operation-to-list operation seq)
(cons (if (= (length operation) 1)
(char->wanted (car operation))
(next-operation operation))
seq))
(define (inner cfac facts rexpr)
(cond
((null? rexpr)
(reverse (add-operation-to-list cfac facts)))
((eqv? (car rexpr) operator)
(inner '() (add-operation-to-list cfac facts) (cdr rexpr)))
(else
(inner (cons (car rexpr) cfac) facts (cdr rexpr)))))
(cons (char->wanted operator) (inner '() '() expr)))
(define (get-parts expr)
(get-general
expr
#\+
(lambda (expr)
(get-general expr #\* (lambda (x) x)))))
(get-parts (string->list str)))
|