Operátorok
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
- fejezetek: 3.1.5
- fóliák: I.50-58
3.1.5 Operátorok
Az operátorok „szintaktikus édesítőszerek”, mert a kifejezés beolvasását követően eltűnnek, a rendszeren belül a kifejezés szabványos alakú lesz. Pl.:
S1+S2>1000.= hívás alapstruktúra alakja: =>(+(S1, S2), 1000).
Új operátor létrehozása:
:- op(<prioritás>, <fajta>, <operátornév>). :- op(500, xfx, --).
Operátoros kifejezés:
<összetett kifejezés> ::= <struktúranév> (<argumentum>, ...) | <argumentum> <operátornév> <argumentum> % infix kifejezés | <operátornév> <argumentum> % prefix kifejezés | <argumentum> <operátornév> % posztfix kifejezés <operátornév> ::= <struktúranév>
Az operátornév tetszőleges névkonstans lehet, egyszerre több (azonos prioritású és fajtájú) operátort is létrehozhatunk: a harmadik paramétert szögletes zárójelbe tesszük és vesszővel választjuk el az operátorokat (pl.
:- op(500, yfx, [+, -]).
).
A prioritás egy egész szám 1 és 1200 között. A kisebb prioritású operátorok előbb zárójeleződnek mint az ugyanolyan fajtájúak. A 0 prioritás megszünteti az operátort.
A fajta jellemző azt határozza meg, hogy az azonos prioritású operátorok hogyan zárójeleződjenek. Az f szemlélteti az operátort,
- x: az adott oldalon nem állhat azonos prioritású operátor zárójelezetlenül
- y: az adott oldalon állhat azonos prioritású operátor zárójelezetlenül
Pl: infix operátorok esetén
- yfx balról jobbra zárójelez, ilyen a + és a - is.
- xfy jobbról balra zárójelez.
- xfx nem engedi egyik oldalt se az azonos precedenciájú zárójelezetlen operátort, ilyen a > és a < is.
A fajta lehetséges értékei: xfx, xfy, yfx (infix), fx, fy (prefix), xf, yf (postfix).
A Prolog operátorok előnyei:
- lehetővé teszi az ismert matematikai leírásokat
- metaprogramozásra is lehetőséget ad
- könnyen olvashatóvá teszi a kódot
Hátránya viszont hogy az operátor definiciónak nem lokális a hatása (bármikor felüldefiniálható a használt operátor prioritása)