tankfeeder / version.l

# School
(de version? (L)
   (>= L (version T)) )

# Student
(de version? (L V)
   (default V (version T))
   (cond
      ((or 
         (not L)
         (> (car L) (car V)) ) T )
      ((= (car L) (car V))
         (version? (cdr L) (cdr V)) ) ) )

# Enterprise
(de version? (Lst)
   (let Ver (version T)
      (nand
         (find
            '((L V)
               (and
                  (- L V) 
                  (or (gt0 @) (lt0 @)) ) )
         Lst 
         Ver )
      (lt0 @@) ) ) )

# Tests
(test
   (fully
      version?
      (quote
         (17 2 1)
         (17 2 10)
         (17 2 1)
         (17 11 10)
         (17 11 1)
         (16 11 1)
         (16 11 0)
         (16 7 20) ) )
   (not
      (fully
         version?
         (quote
            (15 10 3)
            (15 3 3)
            (16 3 10)
            (16 6 1) ) ) ) )

(msg 'ok)
(bye)