1. Polaritatea propozițiilor
Scrieți o functie care ia ca parametru o formulă propozițională și returnează
un triplet de mulțimi disjuncte de propoziții: cele care apar doar pozitiv (sub un număr par de negații), doar negativ (sub un număr impar de negații) și cele care apar în ambele moduri.
Cerințe și indicații de rezolvare
Rezolvați problema folosind un dicționar care reține modul în care a fost
întâlnită o propoziție. Cele două proprietăți (apare pozitiv; apare negativ)
sunt independente, și pot fi reprezentate fiecare pe
un bit al unui număr (de exemplu, bitul 0 indică apariția pozitivă, bitul 1 apariția negativă).
Valoarea 1 (20) înseamnă deci "apare doar pozitiv", 2 (21) înseamnă "apare doar negativ", iar 3 (SAU pe biți, operatorul lor între cele două) înseamnă că apare în ambele moduri.
(Această tehnică se folosește pentru reprezentarea eficientă a unei mulțimi, în acest caz, o mulțime de proprietăți independente).
Când întâlnim o propoziție cu o anumită polaritate, actualizăm valoarea din dicționar (dacă există!) cu un SAU logic pe biți (lor) între valoarea existentă și polaritatea curentă (reprezentată prin 20 sau 21).
Reprezentăm astfel faptul că faptul că propoziția apare într-un anumit fel (bitul respectiv e 1) dacă a fost întâlnită în acest fel în trecut SAU apare în acest fel acum. Operația lor se face independent și împreună pentru toți biții (în acest caz, sunt de interes doar biții 0 și 1).