#lang scheme/base (provide valid-version? version->list versionlist str) (let ([ver (map string->number (regexp-split #rx"[.]" str))]) (case (length ver) [(2) (append ver '(0 0))] [(3) (append ver '(0))] [(4) ver] [else (error 'version->list "bad version: ~e" str)]))) ;; the following functions assume valid version string inputs (define (versionlist a)] [b (version->list b)]) (cond [(null? a) #f] [(< (car a) (car b)) #t] [(> (car a) (car b)) #f] [else (loop (cdr a) (cdr b))]))) (define (version<=? a b) (or (equal? a b) (versionlist v)]) (or ((list-ref l 1) . >= . 90) ((list-ref l 2) . >= . 900))))