Este evaluador basado en la Máquina G, posee un numero reducido de palabras reservadas, aunque las suficientes para poder implementar cualquier función que sea necesaria.

Comentarios:

Se representan entre corchetes.
{ Esto es un comentario }

Primitivas Aritméticas: +, -, *, /, mod

Todas estas funciones primitivas tienen dos argumentos estrictos. La función mod, ofrece el resto de la division entera entre dos valores.

Operadores Relacionales: ==, >, >=, <, <=, <>

Estas funciones tambien operan sobre dos argumentos estrictos, y dan como resultado 'true' o 'false'. Recuerdese que en lambda cálculo, las llamadas a funciones se hacen de forma infija, así: < 2 3, == 5 6, etc.

Operadores Lógicos: and, or, not.

Ofrecen la posibilidad de operar logícamente el resultado de comparaciones hechas con las primitivas de comparación. Las primitivas 'and' y 'or' son estrictas en sus primer argumento, y la primitiva 'not' en su argumento.

Primitiva Condicional: if.

Esta primitiva posee tres argumentos, de los cuales solo el primero es estricto, es decir, que se evalua en primer lugar y dependiendo de si su valor es true o false, se devolvera el segundo o el tercer argumento respectivamente.

Ejemplo:

if (< x 3) (+ x 33) 2 where x = 5

En este ejemplo se ha incluido la clausula where, esta clausula se aplica tras una expresión y sirve para sustituir variables libres por un valor determinado, puediendo ser este valor incluso una función.

Ejemplo con where.

(+ (* x y) (+ x y) where x = 5 ) where y = 7

Las palabra reservadas 'true' y 'false' puede ser introducidas directamente.



Primitivas para el manejo de listas.

Constructor de listas:

En este evaluador el constructor de listas queda representado por:

[ (expr1) (expr2) .... (expr n) ......], por tanto las listas podran ser heterogeneas.

Tambien tenemos la posibilidad de construir listas con las palabras reservadas 'list' y 'nil'. Vemos a continuación como definimos una lista con tres valores utilizando ambas formas.

[1 2 3] o tambien: list 1 (list 2 (list 3 nil ) ) )


Primitiva: head

Esta primitiva, devuelve el elemento que se encuentra en la cabeza de una lista, siempre y cuando no se trate de la lista vacia.

Ejemplo:
head [1 2 3] -> 1.

Primitiva: tail

Esta primitiva, devuelve la cola de una lista, siempre y cuando no se trate de la lista vacia.

Ejemplo:
tail [1 2 3] -> [2 3].


Primitiva: isnil

Indica si una lista es vacia o no lo es.

Ejemplo:
isnil [1 2 3] -> false.
isnil [] -> true.


Primitiva: cons

Este es el constructor de listas. Añade un elemento a una lista, por su cabeza.

Ejemplo:
cons 1 [4 5 6] -> [1 4 5 6].

 


Combinadores


Combinador: Y

El combinador Y se utiliza para presentar recursión. La definición de este combinador es: Y = \f. f (Y f).

Ejemplo de función recursiva, usando este combinador. El famoso factorial.

(Y (\fact.\x. if (< x 1) 1 (* x (fact (- x 1)))) ) 7

Esta expresión, calcula el factorial de 7.

Combinador: K

Este combinador, aplicado a dos argumentos, devuelve siempre el primero. Su definición es: K = \x.\y. x


Combinador: I

Este es el combinador Identidad. Se define como: I = \x. x


REGRESAR A LA PÁGINA PRINCIPAL