Polsk notation ( rekord ), også kendt som præfiksnotation (rekord), er en form for skrivning af logiske , aritmetiske og algebraiske udtryk. Et karakteristisk træk ved en sådan notation er , at operatoren er placeret til venstre for operanderne . Hvis operatøren har en fast aritet , vil en sådan notation ikke have nogen parentes og kan fortolkes uden tvetydighed. Den polske logiker Jan Lukasiewicz opfandt denne notation omkring 1920 for at forenkle propositionel logik .
Alonzo Church nævnte denne notation i sin klassiske bog om matematisk logik som et bemærkelsesværdigt notationssystem, og modsatte endda Alfred Whiteheads og Bertrand Russells udlægninger af logiske notationer i Principia Mathematica . [en]
Selvom den polske notation ikke bruges i matematik, er den meget brugt i datalogi .
I præfiksnotation vil tilføjelse af tallene 1 og 2 blive skrevet "+ 1 2" i stedet for at skrive "1 + 2". I mere komplekse udtryk går operatorerne forud for operanderne, men selve operanderne kan være ikke-trivielle udtryk, der indeholder deres egne operatorer. For eksempel et udtryk, der er skrevet med traditionel infix-notation
(5 − 6) * 7i præfiks kan skrives som
*(− 5 6) 7eller simpelthen
* − 5 6 7Da enhver simpel aritmetisk operation er binær, kan dens præfiksrepræsentation ikke fortolkes på to måder, så der er ingen grund til at bruge parenteser. I det foregående eksempel var der brug for parenteser i den traditionelle infix-notation, og nu vil vi flytte dem
5 − (6 * 7)eller bare slette
5 − 6 * 7dette vil ændre betydningen og resultatet af evalueringen af hele udtrykket. Den tilsvarende præfiksnotation for et sådant udtryk ville se sådan ud:
− 5 * 6 7Subtraktionsberegningen forsinkes, indtil begge operander (5 og resultatet af at gange 6 og 7) er blevet læst. Som med enhver anden notation evalueres de dybeste udtryk først, men i polsk notation bestemmes dybden af et udtryk af rækkefølgen, ikke parenteserne.
Præfiksnotation i simpel aritmetik er af stort set akademisk interesse. Ligesom postfix-notation er præfiksnotation blevet brugt til nogle kommercielle computere (HP-11C). At lære om præfiksnotation er ofte det første trin i compilerdesign.
Præfiksnotation er meget udbredt i s-udtryk i programmeringssproget Lisp , hvor der er behov for parenteser, fordi aritmetiske operatorer har forskellige ariteter. Ambi - programmeringssproget bruger polsk notation til aritmetiske operationer og programstruktur. Postfix-notation bruges i mange stack-sprog , såsom PostScript , og er grundlaget for mange computermaskiner (beregnere), især Hewlett-Packard computere .
Det er også vigtigt at bemærke, at antallet af operander i et udtryk skal være én mere end antallet af operationer, ellers giver udtrykket ikke mening (i betragtning af at der kun bruges binære operationer i udtrykket ). Dette kan let overses, når man arbejder med lange, komplekse udtryk, som vil føre til fejl. Derfor er det nødvendigt at være opmærksom på antallet af operationer og operander, når du bruger præfiksnotation.
Rækkefølgen af operationer bestemmes af strukturen af præfiksnotationen og kan let bestemmes. Det vigtigste at huske er, at når man vurderer et udtryk, skal rækkefølgen af operanderne bevares. Dette er ikke vigtigt for operationer, der er kommutative , men for ikke-kommutative operationer såsom subtraktion og division er dette faktum nøglen til at analysere udtrykket. For eksempel følgende udtryk:
/ 10 5 = 2 (præfiksnotation)
skal læses som "at dividere 10 med 5". Derfor vil resultatet af beregningen være 2, ikke ½, hvilket ville være resultatet af en forkert parsing af udtrykket.
Præfiksnotation er især populær i stack-sprog på grund af deres evne til nemt at skelne mellem rækkefølgen af operationer uden at bruge parenteser. For at bestemme rækkefølgen af evaluering af operatorer i præfiksnotation er det ikke engang nødvendigt at huske hele operationshierarkiet, som med infiksnotation . I stedet for at analysere udtrykket for at finde den operator, der skal evalueres først, bør man læse udtrykket fra venstre mod højre, se på operatoren og dens nærmeste to operander. Hvis der er en anden operatør blandt disse operander, forsinkes evalueringen af den første operatør, indtil den nye operatør er evalueret. Gentagelser af denne proces gentages, indtil operatoren evalueres, hvilket til sidst skal ske, hvis antallet af operander i udtrykket er én mere end antallet af operationer (i tilfælde af binære operationer). Når en operator er blevet evalueret, erstattes den og dens to operander med den resulterende værdi (operanden). Da operatoren og to operander erstattes af den beregnede operand, er der en operator og en mindre operand. Derefter forbliver N operatorer og N + 1 operander også i udtrykket, hvilket giver dig mulighed for iterativt at fortsætte processen.
I eksemplet nedenfor kan du se, at et tilsyneladende kompliceret udtryk i præfiksnotation faktisk ikke er så svært at forstå (til højre for lighedstegnet, det tilsvarende udtryk i infiksnotation):
- * / 15 - 7 + 1 1 3 + 2 + 1 1 = 15 / (7 - (1 + 1) ) * 3 - (2 + (1 + 1)) - * / 15 - 7 2 3 + 2 + 1 1 = 15 / (7 - 2) * 3 - (2 + (1 + 1)) - * / 15 5 3 + 2 + 1 1 = 15 / 5 * 3 - (2 + (1 + 1)) - * 3 3 + 2 + 1 1 = 3 * 3 - (2 + (1 + 1)) - 9 + 2 + 1 1 = 9 - (2 + (1 + 1) ) - 9 + 2 2 = 9 - (2 + 2) - 9 4 = 9 - 4 5 = 5Tabellen nedenfor viser kernenotationen foreslået af Jan Lukasiewicz til propositionel logik . Nogle bogstaver i den polske notation står for specifikke ord på polsk :
koncept | Betinget notation |
polsk notation |
polsk ord |
---|---|---|---|
Negation | φ | Nφ | negacja |
Konjunktion | φ ψ | Kφψ | koniunkcja |
Disjunktion | φ ψ | Aφψ | alternativt |
implikation | φ ψ | Cφψ | |
Ækvivalens | φ ψ | Eφψ | ekwiwalencja |
Schaeffer slagtilfælde | Dφψ | dysjunkcja | |
Mulighed | φ | Mφ | możliwość |
Brug for | φ | Lφ | |
Universal kvantifier | φ | Πφ | |
Eksistens kvantifier | φ | Σφ |
Bemærk, at i Lukasiewicz' papir om logik med mange værdier, er kvantificerere ordnet efter propositionel værdi.