Как я могу взять таблицу истинности и превратить ее в сжатый блок if?
Например, допустим, у меня есть таблица истинности, где A и B - условия, а x, y и z - возможные действия:
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
Это может превратиться в нижний блок if:
if(A)
{
if(B)
{
do(x)
}
else
{
do(y)
}
}
else
{
do(z)
}
Это простой пример, но у меня часто есть несколько условий, которые по-разному комбинируют, должны давать разные результаты, и становится трудно найти наиболее компактный и элегантный способ представления их логики в блоке if.
Ответы:
Если вы разрабатываете карту Карно, то и код может выглядеть так же:
источник
В C # .NET вы можете использовать класс Dictionary, чтобы получить результат без IF ELSE, как показано ниже. Приятная вещь в этом:
Если у вас нет эквивалента класса словаря, вы можете сделать то же самое в двоичной функции поиска / поиска.
источник
То, что вы хотите, это алгоритм Rete . Это автоматически объединяет набор правил и расставляет их приоритеты в виде дерева, как вы описываете.
Существует ряд коммерческих систем «движка правил», которые делают это в очень больших масштабах (миллионы правил), где скорость исполнения важна.
источник
Вот ваша библиотека :) И вам не нужно передавать полную K-таблицу, только те поля, которые вас интересуют :) Предполагается, что это оператор AND в таблице истинности. Если вы хотите использовать больше операторов, вы сможете переписать его. Вы можете иметь любое количество аргументов. Написано
python
и проверено.источник
Отобразите входные данные в одно значение, а затем включите его:
источник
В некоторых ситуациях справочная таблица, содержащая указатели на функции, может хорошо работать. В C, например, вы можете сделать что-то вроде этого:
Это хорошее решение, когда количество входов относительно мало, так как количество записей в таблице должно быть 2 ^^ n, где n - количество входов. 7 или 8 входов могут быть управляемыми, 10 или 12 начинает уродливым. Если у вас столько входных данных, попробуйте сначала упростить их другими способами (например, картами Карно).
источник
Посмотрите на программное обеспечение «Gorgeous Karnaugh» - оно может принимать таблицы истинности в качестве примера, принимать аналитические логические определения, принимать сценарии Lua для построения таблиц истинности. Затем программное обеспечение «Gorgeous Karnaugh» рисует K-карты для взятого ввода, который вы можете минимизировать вручную или с помощью логического минимизатора «Espresso», и производит вывод для C / C ++ и некоторых аппаратных языков. Посетите страницу с краткими сведениями о «Великолепном Карно» - http://purefractalsolutions.com/show.php?a=xgk/gkm
источник
if
после ввода таблицы истинности код C / C ++ не может показывать ничего, кроме пустых s.