# V

`(val 'var) -> any`
  Returns the current value of `var`. See also `setq`, `set` and `def`.

      : (setq L '(a b c))
      -> (a b c)
      : (val 'L)
      -> (a b c)
      : (val (cdr L))
      -> b

`val/3`
  Pilog predicate that returns the value of an object's attribute. Typically used in database queries. The first argument is a Pilog variable to bind the value, the second is the object, and the third and following arguments are used to apply the `get` algorithm to that object. See also `db/3` and `select/3`.

      : (?
         (db nr +Item (2 . 5) @Item)   # Fetch articles 2 through 5
         (val @Nm @Item nm)            # Get item description
         (val @Sup @Item sup nm) )     # and supplier's name
       @Item={3-2} @Nm="Spare Part" @Sup="Seven Oaks Ltd."
       @Item={3-3} @Nm="Auxiliary Construction" @Sup="Active Parts Inc."
       @Item={3-4} @Nm="Enhancement Additive" @Sup="Seven Oaks Ltd."
       @Item={3-5} @Nm="Metal Fittings" @Sup="Active Parts Inc."
      -> NIL

`(var sym . any) -> any`
`(var (sym . cls) . any) -> any`
  Defines a class variable `sym` with the initial value `any` for the current class, implicitly given by the value of the global variable `*Class`, or - in the second form - for the explicitly given class cls. See also OO Concepts, `rel` and `var:`.

      : (class +A)
      -> +A
      : (var a . 1)
      -> 1
      : (var b . 2)
      -> 2
      : (show '+A)
      +A NIL
         b 2
         a 1
      -> +A

`(var: sym) -> any`
  Fetches the value of a class variable `sym` for the current object `This`, by searching the property lists of its class(es) and supperclasses. See also OO Concepts, `var`, `with`, `meta`, `:`, `=:` and `::`.

      : (class +A)
      -> +A
      : (var a . 1)
      -> 1
      : (var b . 2)
      -> 2
      : (object 'O '(+A) 'a 9 'b 8)
      -> O
      : (with 'O (list (: a) (: b) (var: a) (var: b)))
      -> (9 8 1 2)

`(version ['flg]) -> lst`
  Prints the current version as a string of dot-separated numbers, and returns the current version as a list of numbers. The JVM- and C-versions print an additional "JVM" or "C", respectively, separated by a space. When `flg` is non-NIL, printing is suppressed. See also `*CPU` and `*OS`.

      $ pil -version
      15.11.0
      : (version T)
      -> (15 11 0)

`(vi 'sym) -> sym`
`(vi 'sym 'cls) -> sym`
`(vi '(sym . cls)) -> sym`
`(vi) -> NIL`
  (Debug mode only) Opens the "vi" editor on the function or method definition of `sym`. A call to `ld` thereafter will `load` the modified file. A call without arguments permanently switches the REPL line editor and the `edit` function to "vi" mode. See also `doc`, `edit`, `em`, `*Dbg`, `debug` and `pp`.

      : (vi 'url> '+CuSu)  # Edit the method's source code, then exit from 'vi'
      -> T

`(view 'lst ['T]) -> any`
  Views `lst` as tree-structured ASCII graphics. When the `T` argument is given, `lst` should be a binary tree structure (as generated by `idx`), which is then shown as a left-rotated tree. See also `pretty` and `show`.

      : (balance 'I '(a b c d e f g h i j k l m n o))
      -> NIL
      : I
      -> (h (d (b (a) c) f (e) g) l (j (i) k) n (m) o)

      : (view I)
      +-- h
      |
      +---+-- d
      |   |
      |   +---+-- b
      |   |   |
      |   |   +---+-- a
      |   |   |
      |   |   +-- c
      |   |
      |   +-- f
      |   |
      |   +---+-- e
      |   |
      |   +-- g
      |
      +-- l
      |
      +---+-- j
      |   |
      |   +---+-- i
      |   |
      |   +-- k
      |
      +-- n
      |
      +---+-- m
      |
      +-- o
      -> NIL

      : (view I T)
               o
            n
               m
         l
               k
            j
               i
      h
               g
            f
               e
         d
               c
            b
               a
      -> NIL