Programok szerkezete, eljárás, klóz, kifejezés fogalma, kifejezések osztályozása

A VIK Wikiből
(PrologElm1 szócikkből átirányítva)

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.1 - 3.1.3

3.1.1. A Prolog programok elemei

Egy Prolog program egy vagy több predikátumból áll. Egy predikátum egy vagy több (de azonos funktorú tehát azonos nevű és argumentumszámú) klóz -ból épül fel. Egy klóz lehet tényállítás vagy szabály. Mindkét esetben a klózt ponttal kell lezárni. A tényállítás egyetlen fej -ből áll, a szabályok fej és törzs részből állnak, amelyeket a :- jelsorozat választ el egymástól. Egy törzs cél -ok vesszővel elválaszotott sorozata.

Prolog programok szerkezete:

<Prolog program> ::= egy vagy több <predikátum> 
<predikátum>	  ::= egy vagy több azonos funktorú <klóz> 
<klóz>			  ::= <tényállítás> vagy <szabály> 
<tényállítás>	 ::= <fej> 
<szabály>		  ::= <fej> :- <törzs> 
<törzs>			 ::= <cél>, ... 
<cél>				::= <kifejezés> 
<fej>				::= <kifejezés> 

Pl.:

  • tényállítás:
		  szülője('Imre','István').
  
  • szabály:
	 nagyszülője(Gyerek, Nagyszülő):-
		  szülője(Gyerek, Szülő),
		  szülője(Szülő, Nagyszülő).
  

3.1.2. Prolog kifejezések

Egy Prolog kifejezés lehet változó (_var_) , konstans (_atomic_) vagy összetett kifejezés (_compound_). Konstans lehet névkonstans (_atom_) vagy számkonstans (_number_), az utóbbi egész (_integer_) vagy lebegőpontos (_float_). Egy összetett kifejezés egy struktúranév -ből és egy zárójelbe tett argumentum lista -ból áll. Az argumentumlista egy vagy több egymástól vesszővel elválasztott argumentumból épül fel. A struktúranév egy névkonstans, míg az argumentum egy tetszőleges Prolog kifejezés lehet.

Kifejezések:

<kifejezés>			  ::= <változó> | <konstans> | <összetett kifejezés> 
<konstans>				::= <névkonstans> | <számkonstans> 
<számkonstans>		  ::= <egész szám> | <lebegőpontos szám> 
<összetett kifejezés> ::= <struktúranév> (<argumentum>, ...) 
<struktúranév>		  ::= <névkonstans> 
<argumentum>			 ::= <kifejezés> 

Összetett kifejezés:

személy('Weöres Sándor', 1913, 1989)
sum_tree(node(Left, Right), S)

Megjegyzés:
a S is S1+S2 nem illeszkedik a fenti leírásra: operátoros kifejezés belső kanonikus alakja:

is(S, +(S1,S2))

Kifejezések osztályozása

var(X)		 X változó 
nonvar(X)	 X nem változó 
atomic(X)	 X konstans 
compound(X)  X struktúra 
atom(X)		X atom 
number(X)	 X szám 
integer(X)	X egész szám 
float(X)	  X lebegőpontos szám 

Kifejezések hierarchiája

 kifejezés
  /	  \
var	  nonvar
		  /	 \
	atomic	 compound
	/	 \
atom	 number
		  /	 \
  integer	 float

3.1.3. Prolog lexikai elemek

A változók mindig nagybetűvel (vagy aláhúzással) kezdődnek, a konstansok vagy kisbetűvel kezdődnek vagy az aposztrófok között vannak vagy tapadójelek egymásutánjaiból állnak.

  • *változó*: FAKT, Fakt, _fakt, X2, _, _2
  • *konstans*: 0, -123, 10.0, 12.1e8
    • névkonstans: ! ; [] {}
  • *tapadójelek*: + - * / \ $ ^ < > = ' ~ : . ? @ # &