From 6a5081211d00f317d19f0b96ec78bb43e0c24901 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 14 Feb 2020 22:08:06 -0800 Subject: [PATCH] tidier --- quad/quadwriter/query.rkt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/quad/quadwriter/query.rkt b/quad/quadwriter/query.rkt index 2479cfbe..03573669 100644 --- a/quad/quadwriter/query.rkt +++ b/quad/quadwriter/query.rkt @@ -9,7 +9,7 @@ (loop elem)))))) (list->vector qs)) -(define (string->key str #:this [this? #false]) +(define (string->key str) (match str ["doc" 'doc] [(or "section" "sec" "s") 'section] @@ -29,13 +29,8 @@ (for/list ([piece (in-list (string-split str ":"))]) (match (regexp-match #px"^(.*)\\[(.*?)\\]$" piece) [#false (cons (string->key piece) #false)] - [(list _ name arg) (cons (hash-ref preds (string->key name)) (or (string->number arg) - (string->symbol arg)))]))) - -(define (vector-memf proc vec) - (for/first ([idx (in-range (vector-length vec))] - #:when (proc (vector-ref vec idx))) - idx)) + [(list _ name arg) (cons (hash-ref preds (string->key name)) + (or (string->number arg) (string->symbol arg)))]))) (define (query quad-or-index query-str [starting-q #false]) (define vec (match quad-or-index @@ -47,10 +42,13 @@ #:break (not vidx)) (match query-piece [(cons pred 'this) - ;; resolve `this` by finding the querying quad, and searching backward + ;; find the querying quad, and from there search backward (for/first ([vidx (in-range (vector-memq starting-q vec) -1 -1)] #:when (pred (vector-ref vec vidx))) vidx)] + [(cons pred 'last) (error 'unimplemented)] + [(cons pred 'prev) (error 'unimplemented)] + [(cons pred 'next) (error 'unimplemented)] [(cons pred count) (for/fold ([vidx vidx] ;; sub 1 because return values add 1