DarwinBotsManual
Abrir la app EnglishEN

xor

Reemplaza los dos valores de arriba de la pila booleana por uno: verdadero si exactamente uno de los dos lo es.

Datos

Palabra
xor
Familia
Lógicos
Pila booleana
saca 2, pone 1
Qué hace
Saca dos valores de la pila booleana y apila verdadero si exactamente uno lo es. Con uno solo lo invierte; con la pila vacía apila falso.
Costo
Lógica
Se ejecuta en
dentro de un gen: en la condición (cond) y en el cuerpo (start o else)

xor, el o exclusivo, saca los dos valores de arriba de la pila booleana y apila verdadero si uno es verdadero y el otro no. Si los dos son iguales (dos verdaderos o dos falsos), da falso.

Pila antes (tope a la derecha)Después de xor
verdadero falsoverdadero
falso verdaderoverdadero
verdadero verdaderofalso
falso falsofalso

Sirve para «una cosa o la otra, pero no las dos». El bot Acer Runco of Vita, The Weed of Life, del Bestiario, lo usa en un gen que gira y crea lazos (acá mostramos solo la parte que gira): entre otras condiciones pide que no vea nada justo al frente (.eyef) o que lo que ve sea de su especie (.refeye, .myeye), pero no las dos cosas a la vez:

' fragmento de Acer Runco of Vita: las condiciones de un gen
cond
  *40 11 =
  *.robage 20 >
  *.eyef 0 =
  *.refeye *.myeye =
  xor
start
  40 *.aim add .setaim store
stop

Otra forma de verlo: xor con un verdadero invierte el otro valor, igual que not, y con un falso lo deja igual. Y a b xor es verdadero exactamente cuando a y b son distintos.

Con un solo valor en la pila, xor lo invierte (el que falta cuenta como verdadero); con la pila vacía apila falso. El o exclusivo bit a bit entre números es ^.