<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok</id>
	<title>Deklaratív programozás - Prolog gyakorlati feladatok - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&amp;action=history"/>
	<updated>2026-05-18T10:55:10Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&amp;diff=177809&amp;oldid=prev</id>
		<title>Szikszayl: Szikszayl átnevezte a(z) Prolog Gyakorlati feladat gyűjtés lapot a következő névre: Deklaratív programozás - Prolog gyakorlati feladatok</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&amp;diff=177809&amp;oldid=prev"/>
		<updated>2014-02-15T17:10:40Z</updated>

		<summary type="html">&lt;p&gt;Szikszayl átnevezte a(z) &lt;a href=&quot;/index.php?title=Prolog_Gyakorlati_feladat_gy%C5%B1jt%C3%A9s&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Prolog Gyakorlati feladat gyűjtés (a lap nem létezik)&quot;&gt;Prolog Gyakorlati feladat gyűjtés&lt;/a&gt; lapot a következő névre: &lt;a href=&quot;/Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&quot; title=&quot;Deklaratív programozás - Prolog gyakorlati feladatok&quot;&gt;Deklaratív programozás - Prolog gyakorlati feladatok&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;hu&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Régebbi változat&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;A lap 2014. február 15., 19:10-kori változata&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;hu&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nincs különbség)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key my_wiki:diff:1.41:old-137937:rev-177809 --&gt;
&lt;/table&gt;</summary>
		<author><name>Szikszayl</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&amp;diff=137937&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologGyak}}   ==Feladat== &lt;pre&gt; append(X, _, [a,b,c,d]), X = [_|_], !. &lt;/pre&gt; ===Megoldás=== &lt;pre&gt; X = [a] ? ; no &lt;/pre&gt; ===Komment=== &lt;pre&gt;…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_gyakorlati_feladatok&amp;diff=137937&amp;oldid=prev"/>
		<updated>2012-10-21T20:10:02Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologGyak}}   ==Feladat== &amp;lt;pre&amp;gt; append(X, _, [a,b,c,d]), X = [_|_], !. &amp;lt;/pre&amp;gt; ===Megoldás=== &amp;lt;pre&amp;gt; X = [a] ? ; no &amp;lt;/pre&amp;gt; ===Komment=== &amp;lt;pre&amp;gt;…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|PrologGyak}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
append(X, _, [a,b,c,d]), X = [_|_], !.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = [a] ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Komment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
append (A, B, AB).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez alapból azt csinálja, hogy A mögé fűzi B-t, és ezt AB-ben adja vissza.&lt;br /&gt;
Ennek inverz művelete az, ha a kimenetre egy véges listát adsz meg, és a&lt;br /&gt;
bemenetekhez meg tetszőleges változókat írsz. Ekkor a Prolog az összes&lt;br /&gt;
lehetséges módon szétbontja az AB listát 2 részre. Ez azt jelenti, hogy&lt;br /&gt;
&lt;br /&gt;
A=[], B=[a,b,c,d];&amp;lt;br /&amp;gt;&lt;br /&gt;
A=[a],  B=[b,c,d];&amp;lt;br /&amp;gt;&lt;br /&gt;
...&amp;lt;br /&amp;gt;&lt;br /&gt;
A=[a,b,c,d], B=[];&lt;br /&gt;
&lt;br /&gt;
listákat csinál belőle.&amp;lt;br /&amp;gt;&lt;br /&gt;
Mivel a klóz nem csak ennyiből áll, hanem van mögötte egy X = [_ | _] is,&lt;br /&gt;
csak olyan szétbontás fog megfelelni, ami nem eredményez az első listában&lt;br /&gt;
üres listát (tehát A nem []). Ebből az első jó megoldás az A=[a]. Így kerül&lt;br /&gt;
X-be X=[a|[]], vagy rövidebben írva X=[a]. Mivel a klóz 3. céljában egy&lt;br /&gt;
vágó szerepel (egy ! jel), ezért az összes további megoldás le sem&lt;br /&gt;
fog generálódni, hiszen egy helyes megoldás utan leáll a kereséssel.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select(1, [2,X,3], L).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = 1, L=[2,3] ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
A fenti hívás azt mondja, hogy a [2,X,3] listából szeretnénk elhagyni az 1-es elemet. A select viszont meghiúsul, ha a listának nincs olyan eleme, ami megegyezik az elhagyandóval. Tehát ha azt szeretnénk, hogy a fenti hívás sikerrel fusson le, az X-nek 1-nek kell lennie.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
number_codes(123, [_|L]), number_codes(X, L).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L = [50,51], X = 23 ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
number_codes(Szam, Kodok).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A number_codes eljárás a Szam-ot - decimális alakban - stringként értelmezi és a Kodok listában visszaadja az ASCII kódjait. A feladatban L ennek a listának a farkát képviseli, tehát a 2 és 3 számok kódjai vannak benne. A második number_codes hívás épp az előző ellentettjé csinálja, azaz a listában kapott kódokból készült számot adja vissza X-ben.&lt;br /&gt;
(Érdemes megfigyelni, hogy a number_codes kétirányban is használható. ;) )&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\+ \+ X = 1, X = 2.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = 2 ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
Először elemezzük ki a \+ \+ X = 1 részt.&lt;br /&gt;
&lt;br /&gt;
\+ X = 1 akkor lesz igaz, ha X nem egyesíthető 1-el. Mivel X egy változó, így egyesíthető, tehát \+ X = 1 meghiúsul, \+ \+ X = 1 viszont már igaz lesz (kétszeres tagadás). Fontos tudni a \+ szerkezet viselkedéséről, hogy a \+ X = 1 nem helyettesíti be X értékét, az - jelen esetben - továbbra is egy változó marad. Ezért a következő X = 2 hívás egyesíteni tudja X értékét 2-vel.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A,B] = [x,y,z].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
Nagyon egyszerű: az [A,B] egy kételemű lista, [x,y,z] pedig három elemű, ezért nem egyesíthetőek.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X	= : =	3*4.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! Instantiation error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Komment===&lt;br /&gt;
Na itt a jó öreg Instantiation Error. :) Az = : = operátorról tudni kell, hogy mindkét oldalán tömör aritmetikai kifejezéseket vár, tehát nem lehet bennük változó. Márpedig X egy változó, ezért Futási hibát (Inst. Error) kapunk.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = 2*4, \+ X = 8.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = 2*4 ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
Az X = 2*4 hívás hatására X 2*4-gyel egyesül. (A Prolog egyesítésnél nem számolja ki az aritmetikai kifejezések értékét!)&lt;br /&gt;
A \+ X = 8 hívás akkor sikerül, ha X nem egyesíthető 8-cal. Mivel X-ben 2*4 van, ami NEM egyesíthető 8-cal, így a hívás sikerrel fut le.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X+Y = 2+3*4.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = 2, Y = 3*4 ? ; no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
Itt az operátorok eltérő prioritására láthatunk példát.&lt;br /&gt;
&lt;br /&gt;
A szemléltetés érdekében alapstruktúra alakra hozva a két oldalt:&lt;br /&gt;
+(X, Y) = +(2, *(3,4))&lt;br /&gt;
&lt;br /&gt;
Innen már azonnal látszik, hogy X = 2 és Y = 3*4 lesz az egyesítési algoritmus eredménye.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% parospoz(+L, ?A): A egy pozitív szám, amely páros indexű&lt;br /&gt;
%	eleme az Lszámlistának. A listaelemeket 1-től&lt;br /&gt;
%	számozzuk. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
parospoz([_,A|_], A) :- A &amp;gt; 0.&lt;br /&gt;
parospoz([_,_|T], A) :- parospoz(T, A).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% szomsz(+L, ?Ossz, ?A, ?B): Az L számlistában A és B&lt;br /&gt;
%	szomszédos elemek, és összegük Ossz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
szomsz([A,B|_],O,A,B):-&lt;br /&gt;
	O is A+B.&lt;br /&gt;
szomsz([_|Xs],O,A,B):-&lt;br /&gt;
	szomsz(Xs,O,A,B).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% kozep(+L, ?A): A egy olyan eleme az L listának, amely a&lt;br /&gt;
%	bal és jobb szomszédjának számtani közepe. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kozep([X,Y,Z|_],K):-&lt;br /&gt;
	 Y=:=(X+Z)/2,&lt;br /&gt;
	 K=Y.&lt;br /&gt;
kozep([_|Zs],K) :- &lt;br /&gt;
	 kozep(Zs,K).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% nullpar(+L, ?NL): NL egy olyan kételemű (folytonos)&lt;br /&gt;
%	részlistája L-nek, amelynek összege 0.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nullpar([A,B|Xs],[A,B]):-&lt;br /&gt;
	 0=:=A+B.&lt;br /&gt;
nullpar([_|Xs],NP):-&lt;br /&gt;
	 nullpar(Xs,NP).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%  hosszabb(R,H): igaz, ha R hosszabb mint H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hosszabb([_|_],[]).&lt;br /&gt;
hosszabb([_|T1],[_|T2]) :- hosszabb(T1,T2).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
ETS elfogadta.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% rakov(+L0, ?L): L ugyanolyan hosszú, mint az L0&lt;br /&gt;
%	számlista, és minden eleme 1-gyel nagyobb mint L0 azonos&lt;br /&gt;
%	sorszámú eleme.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rakov([], []).&lt;br /&gt;
rakov([A|T1],[B|T2]) :- &lt;br /&gt;
		  B is A+1,&lt;br /&gt;
		  rakov(T1, T2).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
ETS elfogadta.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% parospoz(+L, ?A): A egy pozitív szám, amely páros indexű&lt;br /&gt;
%	eleme az L számlistának. A listaelemeket 1-től&lt;br /&gt;
%	számozzuk. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
parospoz([_, A | T], P) :-&lt;br /&gt;
  A  &amp;gt; 0,&lt;br /&gt;
  P is A.&lt;br /&gt;
parospoz([_,_|T],A) :- parospoz(T,A).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
ETS elfogadta.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% parosneg(+L, -A): A egy negatív szám,  amely páros indexű&lt;br /&gt;
%	eleme az L számlistának. A listaelemeket 1-től&lt;br /&gt;
%	számozzuk. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
parosneg([_, A | T], P) :-&lt;br /&gt;
  A  &amp;lt; 0,&lt;br /&gt;
  P is A.&lt;br /&gt;
parosneg([_,_|T],A) :- parosneg(T,A).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
ETS elfogadta.&lt;br /&gt;
&lt;br /&gt;
==Feladat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% count(+X, +L, ?N): Az L lista elemeként az X kifejezés&lt;br /&gt;
%	pontosan N-szerfordul elő &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Megoldás===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
count(X, [], 0).&lt;br /&gt;
count(X, [E|L], N) :-&lt;br /&gt;
	  (&lt;br /&gt;
		 X = E -&amp;gt; count(X, L, S), N is S + 1&lt;br /&gt;
		 ; count(X, L, N)&lt;br /&gt;
	  ).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Komment===&lt;br /&gt;
ETS elfogadta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>