From 086b87645afc7b67df716f5efe1cc17eb4140501 Mon Sep 17 00:00:00 2001 From: Tomas Mudrunka Date: Thu, 5 Jan 2017 14:51:15 +0100 Subject: [PATCH] semestralka --- lisp/zavorky.scm | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lisp/zavorky.scm diff --git a/lisp/zavorky.scm b/lisp/zavorky.scm new file mode 100644 index 0000000..19ff47d --- /dev/null +++ b/lisp/zavorky.scm @@ -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) -- 2.30.2