summaryrefslogtreecommitdiff
path: root/not-quite-lisp/nql.scm
diff options
context:
space:
mode:
Diffstat (limited to 'not-quite-lisp/nql.scm')
-rw-r--r--not-quite-lisp/nql.scm33
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)))