#  This program contains samples of all the basic syntactic
#  forms in Icon.

record three(x,y,z)
record zero()
record one(z)

global line, count

procedure main()
end
procedure expr1(a, b)
   local x,y,z
   static e1
   initial e1 := 0
   ()
   {}
   ();()
   []
   [,]
   x.y
   x[i]
   x[i:j]
   x[i+:j]
   x[i-:j]
   (,,,)
   x(,,,)
   x!y
   not x
   |x
   !x
   *x
   +x
   -x
end

procedure expr2(a, b[])
   .x
   /x
   =x
   ?x
   \x
   ~x
   @x
   ^x
   x \ i
   x @ y
   i ^ j
   i * j
   i / j
   i % j
   c1 ** c2
   i + j
   i - j
   c1 ++ c2
   c1 -- c2
   s1 || s2
   a1 ||| a2
   i < j
   i <= j
   i = j
   i >= j
   i > j
   i ~= j
   s1 << s2
   s1 == s2
   s1 >>= s2
   s1 >> s2
   s1 ~== s2
   x === y
   x ~=== y
   x | y
   i to j
   i to j by k
   x := y
   x <- y
   x :=: y
   x <-> y
   i +:= j
   i -:= j
   i *:= j
end

procedure expr3()
   i /:= j
   i %:= j
   i ^:= j
   i <:= j
   i <=:= j
   i =:= j
   i >=:= j
   i ~=:= j
   c1 ++:= c2
   c1 --:= c2
   c1 **:= c2
   s1 ||:= s2
   s1 <<:= s2
   s1 <<=:= s2
   s1 ==:= s2
   s1 >>=:= s2
   s1 >>:= s2
   s1 ~==:= s2
   s1 ?:= s2
   a1 |||:= a2
   x ===:= y
   x ~===:= y
   x &:= y
   x @:= y
   s ? x
   x & y
   create x
   return
   return x
   suspend x
   suspend x do y
   fail
end

procedure expr4()
   while e1 do break
   while e1 do break e2
   while e1 do next
   case e of {
     x:   fail
     (i > j) | 1    :  return
     }
   case size(s) of {
     1:   1
     default:  fail
     }
   if e1 then e2
   if e1 then e2 else e3
   repeat e
   while e1
   while e1 do e2
   until e1
   until e1 do e2
   every e1
   every e1 do e2
   x
   X_
   &cset
   &null
   "abc"
   'abc'
   "\n"
   "^a"
   "\001"
   "\x01"
   1
   999999
   36ra1
   3.5
   2.5e4
   4e-10
end
