diff options
Diffstat (limited to 'not-quite-lisp/nql.scm')
-rw-r--r-- | not-quite-lisp/nql.scm | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/not-quite-lisp/nql.scm b/not-quite-lisp/nql.scm new file mode 100644 index 0000000..3863f02 --- /dev/null +++ b/not-quite-lisp/nql.scm @@ -0,0 +1,33 @@ +(define-module (nql) + #:use-module (srfi srfi-13) + #:export (nql + paren->number)) + + +(define (nql str count-all?) + "GIven string of parens STR, +calculates '(' - ')' when +COUNT-ALL is #t.. + +If COUNT-ALL? is #f, returns the +index of the first time a negative +number is reached." + (let loop ((floor 0) (iteration 0) (lst (map paren->number + (string->list str)))) + (cond + ((and (not count-all?) + (> 0 floor)) iteration) + ((null? lst) (and count-all? floor)) + (#t (loop (+ (car lst) floor) + (1+ iteration) + (cdr lst)))))) + +(define (paren->number char) + "Given a character representing a +parenthesis, returns 1 for '(' and +-1 for ')'. +Returns zero for all other characters." + (cond + ((char=? char #\() 1) + ((char=? char #\)) -1) + (#t 0))) |