semestralka
[mirrors/Programs.git] / lisp / zavorky.scm
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)
This page took 0.294977 seconds and 4 git commands to generate.