Translate

domingo, 1 de septiembre de 2019

Citas y condiciones en Factor


Similar a otros lenguajes, las funciones pueden ser mantenidas en variables, bueno en la pila. Estas clausuras se denominan “quotation” o citas y se escribe delimitado por [ ] .

[ 42 + ]

Veamos un ejemplo :

IN: scratchpad 20
--- Data stack:
20

IN: scratchpad [ 42 + ]
--- Data stack:
20
[ 42 + ]

IN: scratchpad call
--- Data stack:
62

Las citas son importantes y se utilizan para las condiciones.

La palabra if recibe como parámetro 1 condición y 2 citas y ejecuta el primero si es verdadero y el segundo de lo contrario :

IN: scratchpad 10 0 > [ "pos" ] [ "neg" ] if .
"pos"
IN: scratchpad -5 0 > [ "pos" ] [ "neg" ] if .
"neg"
IN: scratchpad "cool" [ "yes" ] [ "no" ] if .
"yes"

Por si hay dudas el if tiene la forma :

<condition> <true branch> <false branch> if

También podemos utilizar la palabra ? :

IN: scratchpad 10 0 > "pos" "neg" ? .
"pos"
IN: scratchpad -5 0 > "pos" "neg" ? .
"neg"

La palabra when y unless se puede utilizar con una sola cita :

IN: scratchpad 10 0 > [ "pos" . ] when
"pos"
IN: scratchpad -5 0 > [ "neg" . ] unless
"neg"