Я пробовал Javaluator
, который помог мне в оценке выражений вроде (A OR B) AND C
. Но теперь я только хочу расширить выражение (A OR B) AND C
до A AND C OR A AND B
может ли любой орган рассказать мне, как я могу это сделать в Java любой API или любую другую помощь?Как я могу расширить выражения типа (A ИЛИ B) и C до A и C ИЛИ A и B?
ответ
Если вам не нужно это делать самостоятельно, вы можете использовать Wolfram | Alpha API, он имеет множество функций, связанных с булевой алгеброй, например, преобразование в различные нормальные формы и так далее. Если это домашнее задание, и вы должны изобрести свое собственное колесо, вы можете использовать некоторые инструменты разбора (или изобрести свое колесо) снова, чтобы токенизировать строку, а затем применить установленные правила логической алгебры: http://mathworld.wolfram.com/BooleanAlgebra.html
Я думаю, что я должен сделать это более конкретное - вы не можете решить эту проблему в общем случае без написания этого набора правил в своем коде (hardcoding it). Самый сжатый способ - использовать что-то вроде ANTLR, чтобы создать язык с ограничениями, зависящими от правил, а затем просто подать на него свои входы.
Это называется правилами Де Моргана. Я думаю, что лучший вариант - использовать Karnaugh Map для этого. Это truth table generator поможет вам на вашем пути.
В более общем смысле булева алгебра. Де Морган - всего лишь пара эквивалентов, связанных с отрицанием AFAIK. –
@MartinSmith да, вы правы –
(А или В) и С к А и С или А и В
Это неверно .... (А или В) и С равна (а и в) или (В и С) ........
так как я могу это сделать в java? – user2167728
поместите код, и мы можем попытаться вам помочь, здесь не место, где люди просят код, здесь люди ищут помощь по их коду .... – Deckard27
@Почему это второй раз, когда он задает тот же вопрос ...в первый раз он просит (A или B), а C равен (a и c) или (B и C) ........ – Deckard27
Если число переменных не очень велико, вы можете проверить выражение для каждого набора переменных. И если это правда на множестве A = true, B = false, C = true
добавить результат OR (A and !B and C)
Эта форма называется «Full disjunctive normal form»
Пожалуйста, напишите ** I **, когда это ты, а не переменная 'i' :) – Maroun
((A && C) || (A && B))? – Sw4Tish
Зачем вам нужен инструмент? Почему бы просто не отредактировать код? – mbeckish