Patch title: Release 85 bulk changes
Abstract:
File: /pliant/language/basic/controls_intro.page
Key:
    Removed line
    Added line
title "Pliant basic controls"

header "if / eif / else"
  
  para
    [The 'if/eif/else' prototype is:]
    listing
      ¤if `condition1
        `instructions1
      [¤eif `condition2
        `instructions2]
      [¤eif `condition3
        `instructions3]
      ...
      [¤else
        `instruction4]
    [the 'eif' and 'else' parts are optional. ]
    how "control.c" section "if"
 
  para
    [An example:]
    listing
      var Int i
      if i=0
        console "i is zero" eol
      eif i=1
        console "i is is one" eol
      else
        console "i is plural" eol

  para
    text "Please, notice that only one of the cases will be executed. Moreover, if the condition is a constant value that can be evaluated at compile time, only the useful part will be compiled ; it means that the Pliant 'if' operator may be used to replace the" ; fixed [ #ifdef ] ; [and] ; fixed [ #if ] ; [operators of the C preprocessor.]

header "while"

  para
    [The 'while' prototype is:]
    listing
      ¤while `condition
        `instructions
    how "control.c" section "while"
 
  para
    [An example:]
    listing
      var Int i := 5
      while i>1
        console "i = " i eol
        i := i\2

header "for"

  para
    [The 'for' prototype is:]
    listing
      ¤for `variable `start `limit [¤step `step]
        `instructions
    [The 'step' parameter is optional (it's default value is 1) ]
    how "control.c" section "for"
 
  para
    [An example:]
    listing
      for (var Int i) 0 5
        console "i = " i eol


header "shunt"

  para
    [The 'shunt' prototype is:]
    listing
      ¤shunt `condition1 `result1 [`condition2 `result2] ... `if_none_was_satisfyed_result
    how "shunt.pli"

  para
    [An example:]
    listing
      function abs x -> y
        arg Int x y
        y := shunt x>=0 x -x

  para
    [Note for C users: 'shunt' is equivalent of ? :]


header "part"

  para
    [The 'part' prototype is:]
    listing
      ¤part `name
        `body
    [in the body, you can use:]
    listing
      ¤leave `name
    [or]
    listing
      ¤restart `name

  para
    [The meaning is execute the body, but while executing the body, 'leave' enables you to jump at the end of the body, and 'restart' enables you to jump at the beginning of the body. ]
    how "part.pli"
 
  para
    [An example:]
    listing
      function search_ab s -> position
        arg Str s ; arg Int position
        part search_a
          for (var Int i) 0 s:len-1
            if s:i="a"
              leave search_a
          return -1
        part search_b
          for (var Int j) i s:len-1
            if s:j="b"
              leave search_b
          return -1
        position := j
      console (search_ab "0123a56b89") eol