def inverse: [t]
(t [a] [b] [c] [d]
[x] (x d c b a)
)
def lastEle: [t]
(t [a] [b] [c] [d] d)
def firstEle: [t]
(t [a] [b] [c] [d] a)
def main:
let tup = [t] (t 1 2 3 4)
(firstEle tup)
Ordena 2 números:
def orderTup: [t]
(t [a] [b] // abre a tupla e coloca os argumentos em contexto
get &(a1, a2) = cpy a
get &(b1, b2) = cpy b
let order =
if {a1 > b1}
// os valores aqui estão fora do contexto e só representam
// a tupla que será retornada
then: [m] [n] [x] (x m n)
else: [a] [b] [x] (x a b)
(order a2 b2)
)
def main:
let tup = [t] (t 1 5)
(orderTup tup)
def paus: [p][o][e][c]p
def ouro: [p][o][e][c]o
def espa: [p][o][e][c]e
def copa: [p][o][e][c]c
def case: [nipe][P][O][E][C]
(nipe P O E C)
def main:
(case ouro
"sou paus"
"sou ouro"
"sou espa"
"sou copa")
nipes: funções de 4 argumentos e retorna 1 deles
case: recebe 5 argumentos, sendo nipe paus, ouro, espa ou copa. Retorna o valor associado à nipe
def main:
let tup = [t] (t 1 2)
(tup [x][y]
{x + y}
)
let pair = &(1, 2)
get &(a, b) = pair
{a + b}
def tup2Higher: [t]
(t [a] [b]
get &(a1, a2) = cpy a
get &(b1, b2) = cpy b
let higher =
if {a1 > b1}
then: [m] [n] (m)
else: [m] [n] (n)
(higher a2 b2)
)
def main:
let tup = [t] (t 1 5)
let lup = [t] (t 9 6)
([m] [n] [x] (x m n) {1 + 4} (tup2Higher lup)
—