Я попробовал Javaluator
, что помогло мне оценить такие выражения, как (A OR B) AND C
. Но теперь я хочу только расширить выражение (A OR B) AND C
до A AND C OR A AND B
. Может ли кто-нибудь сказать мне, как я могу сделать это на Java, какой-либо API или любую другую помощь?
Как расширить такие выражения, как (A OR B) AND C, до A AND C OR A AND B?
Ответы (4)
Если вам не нужно делать это самостоятельно, вы можете использовать Wolfram|Alpha API, в нем есть множество функций, связанных с булевой алгеброй, таких как преобразование в различные нормальные формы и так далее. Если это домашнее задание, и вам нужно изобрести собственное колесо, вы можете использовать некоторые инструменты синтаксического анализа (или снова изобрести свое колесо), чтобы разбить строку на токены, а затем применить набор правил булевой алгебры: http://mathworld.wolfram.com/BooleanAlgebra.html
Я думаю, что я должен сделать это более конкретным - вы не можете решить эту проблему в общем случае, не прописав этот набор правил в своем коде (жестко запрограммировав его). Самый лаконичный способ — использовать что-то вроде ANTLR для создания языка, ограниченного логическими правилами, а затем просто кормить входы в него.
Это называется Правила Де Моргана. Я думаю, что лучший вариант — использовать для этого Карту Карно. Этот генератор таблиц истинности поможет вам в этом.
(А ИЛИ В) И С к А И С ИЛИ А И В
Это неверно.... (A или B) и C равно (a и c) или (B и C)........
(A OR B) AND C
равно A AND C OR B AND C
, потому что И имеет более высокий приоритет, чем ИЛИ. Но да, вообще лучше писать в скобках.
- person Pshemo; 12.08.2013
Если количество переменных не очень велико, вы можете протестировать выражение для каждого набора переменных. И если верно на множестве A = true, B = false, C = true
добавить к результату OR (A and !B and C)
Эта форма называется "Полная дизъюнктивная нормальная форма"
i
:) - person Maroun   schedule 12.08.2013