Här är en funktion som beräknar fakultet:
function f(x) = if x <= 1 then 1 else (f(x-1)*x)
Med indentering blir det:
function f(x) = (
if x <= 1 then
1
else
(f(x-1)*x)
)
Detta är en direkt portering av fakultetsfunktionen från manualsidan från bc. Syntaxen verkar liknande som i bc, men skiljer sig åt i att i GEL är det sista uttrycket det som returneras. Om funktionen return används istället blir det:
function f(x) = ( if (x <= 1) then return (1); return (f(x-1) * x) )
Det absolut enklaste sättet att definiera en fakultetsfunktion är att använda produktloopen enligt följande. Detta är inte bara kortast och snabbast, utan också troligen den mest läsbara versionen.
function f(x) = prod k=1 to x do k
Här är ett större exempel som i stort omdefinierar den inbyggda funktionen ref för att beräkna trappstegsformen för en matris. Funktionen ref är inbyggd och mycket snabbare, men detta exempel demonstrerar några av de mer komplexa funktionerna i GEL.
# Calculate the row-echelon form of a matrix
function MyOwnREF(m) = (
if not IsMatrix(m) or not IsValueOnly(m) then
(error("MyOwnREF: argument not a value only matrix");bailout);
s := min(rows(m), columns(m));
i := 1;
d := 1;
while d <= s and i <= columns(m) do (
# This just makes the anchor element non-zero if at
# all possible
if m@(d,i) == 0 then (
j := d+1;
while j <= rows(m) do (
if m@(j,i) == 0 then
(j=j+1;continue);
a := m@(j,);
m@(j,) := m@(d,);
m@(d,) := a;
j := j+1;
break
)
);
if m@(d,i) == 0 then
(i:=i+1;continue);
# Here comes the actual zeroing of all but the anchor
# element rows
j := d+1;
while j <= rows(m)) do (
if m@(j,i) != 0 then (
m@(j,) := m@(j,)-(m@(j,i)/m@(d,i))*m@(d,)
);
j := j+1
);
m@(d,) := m@(d,) * (1/m@(d,i));
d := d+1;
i := i+1
);
m
)