¿Cómo puedo tomar una tabla de verdad y convertirla en un bloque if compactado?
Por ejemplo, digamos que tengo esta tabla de verdad donde A y B son condiciones y x, y y z son acciones posibles:
A B | x y z
-------------
0 0 | 0 0 1
0 1 | 0 0 1
1 0 | 0 1 0
1 1 | 1 0 0
Esto podría transformarse en el siguiente bloque si:
if(A)
{
if(B)
{
do(x)
}
else
{
do(y)
}
}
else
{
do(z)
}
Esta es una muestra fácil, pero con frecuencia tengo varias condiciones que combinadas de diferentes maneras deberían producir diferentes salidas y se hace difícil encontrar la forma más compacta y elegante de representar su lógica en un bloque if.

Respuestas:
Si está diseñando desde un mapa de Karnaugh, entonces el código también puede verse así:
fuente
En C # .NET, puede usar una clase de diccionario para obtener el resultado sin IF IFSE de la siguiente manera: lo bueno de esto es:
Si no tiene un equivalente de Clase de diccionario, puede hacer lo mismo en una función de búsqueda / búsqueda binaria.
fuente
Lo que quieres es un algoritmo Rete . Esto combina automáticamente un conjunto de reglas y las prioriza en un árbol de la manera que usted describe.
Existen varios sistemas comerciales de "motor de reglas" que hacen esto a gran escala (millones de reglas) donde la velocidad de ejecución es esencial.
fuente
Aquí está su biblioteca :) Y no necesita pasar la tabla K completa, solo los campos que le interesan :) Asume que es el operador AND en la tabla de verdad. Si desea utilizar más operadores, debería poder reescribirlo. Puedes tener cualquier cantidad de argumentos. Escrito
pythony probado.fuente
Asigne las entradas en un solo valor y luego actívelo:
fuente
Una tabla de búsqueda que contiene punteros de funciones puede funcionar bien en algunas situaciones. En C, por ejemplo, puede hacer algo como esto:
Esta es una buena solución cuando el número de entradas es relativamente pequeño, ya que el número de entradas en la tabla tiene que ser 2 ^^ n donde n es el número de entradas. 7 u 8 entradas pueden ser manejables, 10 o 12 comienzan a ponerse feas. Si tiene tantas entradas, intente simplificar por otros medios (como los mapas de Karnaugh) primero.
fuente
Mire el software "Gorgeous Karnaugh": puede aceptar tablas de verdad bastante exactas como su muestra, aceptar definiciones de fórmulas booleanas analíticas, aceptar secuencias de comandos Lua para construir tablas de verdad. A continuación, el software "Gorgeous Karnaugh" dibuja los K-Maps para la entrada tomada, que puede minimizar manualmente o usando el minimizador lógico "Espresso", y produce salida para C / C ++ y algunos lenguajes de hardware. Consulte la página de características de resumen para "Gorgeous Karnaugh": http://purefractalsolutions.com/show.php?a=xgk/gkm
fuente
ifs vacíos después de ingresar a una tabla de verdad.