## First Oz example.

``````
{Browse 5}
%% declaring a variable
declare
% N is an identifier (a name); must start with a capital letter
% 7 is its value
% the result of the declaration is a store variable N that has a value 7
N = 7
{Browse N * N}

%% function definition and recursion:
declare
fun {Fact N}
if N == 0 then 1 else N * {Fact N-1} end
end

{Browse {Fact 8}}

%% Lists:
declare
L = [3 6 7 8]
{Browse L}

% a list consists of two parts: head (a.k.a first) which is the first
% element, and tail (a.k.a rest), which is the rest of the list

% anything with two parts can be decomposed with .1 and .2 selectors:
{Browse L.1} % first element
{Browse L.2} % the rest of the list

% selectors can be nested:
{Browse L.2.1} % the first element of the rest of the list
{Browse L.2.2.2.2} % the rest of the rest of the rest of the rest of the list: nil

% You can also do pattern-matching on lists.
% Patttern-matching deconstructs a multi-part value (such as a list)
% and assigns its parts to variables:
case L of H|T then {Browse H} {Browse T} end

% Using pattern matching in functions
declare
fun {Second List}
case List of H|T then
if T==nil then nil else T.1 end
else nil
end
end

%%% Pattern-matching directly on nil
declare
fun {OneElement L}
case L of H|nil then 1
else 0
end
end

{Browse {OneElement [1]}}
{Browse {OneElement L}}
{Browse {OneElement nil}}

%% constructing lists:
declare
L1 = 4 | 5 | nil

{Browse L1}

%% Lazy evaluation
fun lazy {Ints N}
N | {Ints N + 1}
end

declare
I = {Ints 0}

{Browse I}

{Browse I.1}

{Browse I.2.1}
``````

The views and opinions expressed in this page are strictly those of the page author. The contents of this page have not been reviewed or approved by the University of Minnesota.