(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)))