Ιδού μια συνάρτηση που υπολογίζει παραγοντικά:
function f(x) = if x <= 1 then 1 else (f(x-1)*x)
Με παραγραφοποίηση γίνεται:
function f(x) = ( if x <= 1 then 1 else (f(x-1)*x) )
Αυτή είναι η άμεση θύρα της παραγοντικής συνάρτησης από τη σελίδα εγχειριδίου bc. Η σύνταξη φαίνεται παρόμοια με την bc, αλλά διαφέρει στο ότι στην GEL η τελευταία παράσταση είναι αυτή που επιστρέφεται. Χρησιμοποιώντας τη συνάρτηση return
, θα πρέπει να είναι:
function f(x) = ( if (x <= 1) then return (1); return (f(x-1) * x) )
Ο ευκολότερος τρόπος να οριστεί μια παραγοντική συνάρτηση είναι χρησιμοποιώντας τον βρόχο γινομένου όπως ακολουθεί. Αυτό δεν είναι μόνο ο πιο σύντομη και ο γρήγορη, αλλά επίσης η πιο αναγνώσιμη έκδοση.
function f(x) = prod k=1 to x do k
Ιδού ένα μεγαλύτερο παράδειγμα, αυτό βασικά ξαναορίζει την εσωτερική συνάρτηση ref
για να υπολογίσει τη μορφή κλιμακωτής γραμμής ενός πίνακα. Η συνάρτηση ref
είναι ενσωματωμένη και πολύ γρηγορότερη, αλλά αυτό το παράδειγμα δείχνει μερικά πιο σύνθετα γνωρίσματα της 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 )