semestralka
authorTomas Mudrunka <tomas@mudrunka.cz>
Thu, 5 Jan 2017 13:51:15 +0000 (14:51 +0100)
committerTomas Mudrunka <tomas@mudrunka.cz>
Thu, 5 Jan 2017 13:52:02 +0000 (14:52 +0100)
lisp/zavorky.scm [new file with mode: 0644]

diff --git a/lisp/zavorky.scm b/lisp/zavorky.scm
new file mode 100644 (file)
index 0000000..19ff47d
--- /dev/null
@@ -0,0 +1,49 @@
+#lang racket
+
+(define (ohodnot znak)
+  "vrati +1 pro otevrenou zavorku, -1 pro zavrenou a 0 pro ostatni znaky"
+  (if (char=? znak #\()
+      1
+      (if (char=? znak #\))
+          -1
+          0
+      )
+  )
+)
+
+(define (uvozovky znak faktor)
+  "vrati faktor zavisly na tom zda jsme nebo nejsme uvnitr apostrofu, k tomu vyuziva predchozi stav"
+  (if (char=? znak #\')
+      (modulo (+ faktor 1) 2)
+      faktor
+  )
+)
+
+
+
+(define (zavorky text [debug #f] [soucet 0] [faktor 1])
+  "vypise soucet nezavrenych zavorek v retezci, zaporna cisla udavaji zavorky zavrene navic. ignoruje znaky v apostrofech. lze zapnout debug mod."
+  (if debug
+      (begin
+        (display soucet)
+        (display "x")
+        (display faktor)
+        (display ":")
+        (display text)
+        (display "\n")
+      )
+      0
+  )
+  (if (non-empty-string? text)
+      (zavorky (substring text 1) debug (+ soucet (* (ohodnot (string-ref text 0)) faktor)) (uvozovky (string-ref text 0) faktor))
+      soucet
+  )
+)
+
+;Ukazka pouziti:
+
+(zavorky "pokus (')))')((")
+
+;Ukazka vcetne debug modu
+
+;(zavorky "pokus (')))')((" #t)
This page took 0.104753 seconds and 4 git commands to generate.