Commit | Line | Data |
---|---|---|
086b8764 TM |
1 | #lang racket |
2 | ||
3 | (define (ohodnot znak) | |
4 | "vrati +1 pro otevrenou zavorku, -1 pro zavrenou a 0 pro ostatni znaky" | |
5 | (if (char=? znak #\() | |
6 | 1 | |
7 | (if (char=? znak #\)) | |
8 | -1 | |
9 | 0 | |
10 | ) | |
11 | ) | |
12 | ) | |
13 | ||
14 | (define (uvozovky znak faktor) | |
15 | "vrati faktor zavisly na tom zda jsme nebo nejsme uvnitr apostrofu, k tomu vyuziva predchozi stav" | |
16 | (if (char=? znak #\') | |
17 | (modulo (+ faktor 1) 2) | |
18 | faktor | |
19 | ) | |
20 | ) | |
21 | ||
22 | ||
23 | ||
24 | (define (zavorky text [debug #f] [soucet 0] [faktor 1]) | |
25 | "vypise soucet nezavrenych zavorek v retezci, zaporna cisla udavaji zavorky zavrene navic. ignoruje znaky v apostrofech. lze zapnout debug mod." | |
26 | (if debug | |
27 | (begin | |
28 | (display soucet) | |
29 | (display "x") | |
30 | (display faktor) | |
31 | (display ":") | |
32 | (display text) | |
33 | (display "\n") | |
34 | ) | |
35 | 0 | |
36 | ) | |
37 | (if (non-empty-string? text) | |
38 | (zavorky (substring text 1) debug (+ soucet (* (ohodnot (string-ref text 0)) faktor)) (uvozovky (string-ref text 0) faktor)) | |
39 | soucet | |
40 | ) | |
41 | ) | |
42 | ||
43 | ;Ukazka pouziti: | |
44 | ||
45 | (zavorky "pokus (')))')((") | |
46 | ||
47 | ;Ukazka vcetne debug modu | |
48 | ||
49 | ;(zavorky "pokus (')))')((" #t) |