Я пробовал 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»
- 1. упрощение булевого выражения (a * 'b *' c) + ('a *' b * c) + ('a * b *' c) + (a * 'b * c)
- 2. C# Массив [a, b, c] и массив [a] [b] [c]?
- 3. SqlAlchemy как запросить столбец A == a и B == b и A == b и B == a
- 4. Изменить набор из {a-b, b-c, c-a} на {(a, b), (b, c), (c, a)}?
- 5. Почему var c = "a" || "b" return c = "a" и var c = "a" && "b" return c = "b"?
- 6. Шаблон регулярного выражения для (a и b) или (a и c) или (b и c) в mysql REGEXP
- 7. Как я могу получить (function '(a b a a b c)) => ((a a a) (b b))?
- 8. if (a или b) и оператор c
- 9. В Python почему «a» и «b» и «c» являются «c», а «a» или «b» или «c» является «a»?
- 10. Регулярные выражения (A или A или A & B), (A, но не B)
- 11. проверяет, находится ли нецелое число в диапазоне [a, b) - или [a, b], (a, b), (a, b]
- 12. Условие SQL: (A = B И C LIKE% D%) ИЛИ (A LIKE% B% И C = D)
- 13. jQuery, Validate A или B, но не A и B
- 14. Как использовать мьютекс для синхронизации этой последовательности: (A или B) C (A или B) (A или B) C
- 15. В чем разница между ['[a, a, a]', '[b, b, b]'] и [[a, a, a], [b, b, b]] в python?
- 16. Regex a: b c d a: b
- 17. Для {A = a; B = B; }, будет ли «A = a» строго выполняться до «B = b»?
- 18. Разница между a = b и b = a?
- 19. Различия между * a = b и a = & b?
- 20. Разница между a + = b и a = a + b в Java
- 21. a = (a + b) - (b = a); C++ vs php
- 22. Почему «A = A + B - (B = A)» значения подкачки в C?
- 23. Упростить булевое выражение: (a + b) (b + c) (a + c) = (a + b) (b '+ c)
- 24. Почему Numpy рассматривает a + = b и a = a + b иначе
- 25. Самый простой способ конвертировать «a/b/c» в [«a/b/c», «a/b», «a»]
- 26. Возвратите общее количество пар (a, b), где a - от A и b от B, а a + b - <= c
- 27. PHP transform array 'a', 'b', 'c' to 'a/b/c', 'a/b', 'a'
- 28. Разница между a - = b и a = a - b в Python
- 29. Как написать A :: B :: C => D, заданный A :: B :: C и (A, B, C) => D?
- 30. .Match() A или B или C
Пожалуйста, напишите ** I **, когда это ты, а не переменная 'i' :) – Maroun
((A && C) || (A && B))? – Sw4Tish
Зачем вам нужен инструмент? Почему бы просто не отредактировать код? – mbeckish