Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Rekurze Predikát predek(X,Y).

Podobné prezentace


Prezentace na téma: "Rekurze Predikát predek(X,Y)."— Transkript prezentace:

1 Rekurze Predikát predek(X,Y)

2 predek(X,Y) :- rodic(X,Y).
predek(X,Y) :- rodic(Z,Y),predek(X,Z).

3 Predikát řez (!) Vždy splněn Není povolen návrat přes něj

4 Použití řezu Problém s opakovaným výskytem sourozenců (kteří mají dva společné rodiče) sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y).

5 Predikát fail Nikdy není splněn
Použití: technika „konstruktivního selhání“ muz(pavel). muz(petr). zena(petra). vypis:-muz(X),write(X),nl,fail.

6 Technika cut and fail Způsob definování negace
Zařídím, aby člověk nebyl sám sobě sourozencem. ruzny(X,Y):-X=Y,!,fail. ruzny(X,Y):-true. sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y),ruzny(X,Y).

7 Aritmetika v Prologu Predikát = Predikát is A=1 A=1+1
soucet (A,B,C) :- C is A+B. soucin (A,B,C) :- C is A*B. 7

8 Zjistit, zda je číslo X sudé
sude_cislo(X) :- soucin(2,Y,X). 8

9 Zjistit, zda je číslo X sudé
sude_cislo(X) :- soucin(2,Y,X). Není to dobře, není jasné, co to je Y 9

10 Zjistit, zda je číslo X sudé
cislo(X):-X=0. cislo(Y):-cislo(X),Y is X+1. soucet(A,B,C) :- C is A + B. soucin(A,B,C) :- C is A * B. sude_cislo(X) :- cislo(Y), soucin(2,Y,X). 10

11 Zjistit a vypsat všechny Pythagorejské trojice čísel menších než 100
trojuhelnik(X,Y,Z):- cislo(X), cislo(Y), cislo(Z), X<100, Y<100, Z<100, XX is X*X, YY is Y*Y, ZZ is Z*Z, XXYY is XX+YY, XXYY=ZZ . 11

12 Zjistit a vypsat všechny Pythagorejské trojice čísel menších než 100
cislo100(X):- X=1;X=2;X=3;X=4;X=5;X=6;X=7;X=8;X=9;X=10;X=11;X=12;X=13;X=14;X=15;X=16;X=17;X=18;X=19; X=20;X=21;X=22;X=23;X=24;X=25;X=26;X=27;X=28;X=29;X=30;X=31;X=32;X=33;X=34;X=35;X=36;X=37;X=38;X=39; X=40;X=41;X=42;X=43;X=44;X=45;X=46;X=47;X=48;X=49;X=50;X=51;X=52;X=53;X=54;X=55;X=56;X=57;X=58;X=59; X=60;X=61;X=62;X=63;X=64;X=65;X=66;X=67;X=68;X=69;X=70;X=71;X=72;X=73;X=74;X=75;X=76;X=77;X=78;X=79; X=80;X=81;X=82;X=83;X=84;X=85;X=86;X=87;X=88;X=89;X=90;X=91;X=92;X=93;X=94;X=95;X=96;X=97;X=98;X=99. trojuhelnik(X,Y,Z):- cislo100(X), cislo100(Y), cislo100(Z), XX is X*X, YY is Y*Y, ZZ is Z*Z, XXYY is XX+YY, XXYY=ZZ . vypis:-trojuhelnik(X,Y,Z),write(X),write(,), write(Y), write(,), write(Z),nl,fail. 12

13 Seznam seznam hlava tělo [a,b,c,d,e] a [b,c,d,e] [[a,c],b,d,e] [a,c]
[] -

14 Je element prvkem seznamu?

15 Je element prvkem seznamu?
prvek(H,[H|_]). prvek(X,[_|T]):-prvek(X,T).

16 Spojení dvou seznamů spoj([ ],Sez,Sez). spoj([X|T1],T2,[X|T3]):-spoj(T1,T2,T3). 16

17 Jaké budou odpovědi? ?- spoj([1,2,3],[a,1,b],X). ?- spoj(X, [1,2,3],[1,2,3,4,5],X). ?- spoj([1,2],[4,5,6],[1,2,4,5,6]). 17

18 Generování seznamu čísel mezi M a N
gen(M,N,[M|Ns]):-M<N,M1 is M+1,gen(M1,N,Ns). gen(N,N,[N]). 18

19 Řešení problému s trojúhelníky
gen(M,N,[M|Ns]):- M<N,M1 is M+1,gen(M1,N,Ns). gen(N,N,[N]). prvek(H,[H|_]). prvek(X,[_|T]):-prvek(X,T). cislo100(X):-gen(1,100,S), prvek(X,S). trojuhelnik(X,Y,Z):- cislo100(X), cislo100(Y), cislo100(Z), XX is X*X, YY is Y*Y, ZZ is Z*Z, XXYY is XX+YY, XXYY=ZZ . vypis:-trojuhelnik(X,Y,Z),write(X),write(,), write(Y), write(,), write(Z),nl,fail. 19

20 Ukázka diagnostického expertního systému
rule(1,zvire,obratlovec,[1]). rule(2,zvire,rak,[2,3,4]). rule(3,zvire,krab,[2,3,5]). rule(4,zvire,hmyz,[2,6]). rule(5,hmyz,brouk,[7]). rule(6,hmyz,motyl,[8,9]). rule(7,obratlovec,teplokrevny,[10]). rule(8,obratlovec,studenokrevny,[11]). rule(11,teplokrevny,savec,[12,13]). rule(12,teplokrevny,ptak,[14]). rule(13,savec,selma,[15]). rule(14,savec,kopytnik,[16]). rule(15,savec,tlustokozec,[17,18]). rule(16,savec,opice,[19]). rule(17,selma,kocka,[20]). rule(18,selma,pes,[21]). rule(19,selma,tygr,[22,23]). rule(20,selma,jaguar,[22,24]). rule(21,kopytnik,zebra,[23]). rule(22,kopytnik,zirafa,[25,26,24]). rule(23,kopytnik,koza,[27,28]). rule(24,kopytnik,ovce,[27,29]). rule(25,tlustokozec,slon,[30]). rule(26,tlustokozec,nosorozec,[31]). rule(27,tlustokozec,hroch,[32]). rule(28,ptak,pstros,[33,25,26]). rule(29,ptak,tucnak,[33,32]). rule(30,ptak,albatros,[34]). rule(31,ptak,papousek,[8]). rule(32,studenokrevny,ryba,[32]). rule(33,studenokrevny,plaz,[35]). rule(34,ryba,kapr,[36,38]). rule(35,ryba,uhor,[37,38]). rule(36,ryba,zralok,[22]). rule(37,plaz,had,[22,37]). rule(37,plaz,zelva,[39]). rule(37,plaz,krokodyl,[22,40]).

21 Ukázka diagnostického expertního systému
cond(1,'ma pevnou kostru'). cond(2,'nema pevnou kostru'). cond(3,'ma klepeta'). cond(4,'leze pozpatku'). cond(5,'leze do strany'). cond(6,'leta'). cond(7,'ma krovky'). cond(8,'je barevny'). cond(9,'seda na kvetiny'). cond(10,'ma stalou telni teplotu'). cond(11,'nema stalou krevni teplotu'). cond(12,'ma srst'). cond(13,'saje mleko'). cond(14,'ma peri'). cond(15,'zere maso'). cond(16,'ma kopyta'). cond(17,'je hodne velky'). cond(18,'ma tlustou kuzi'). cond(19,'je podobny cloveku'). cond(20,'mnouka'). cond(21,'steka'). cond(22,'je nebezpecny'). cond(23,'ma cerne pruhy'). cond(24,'ma cerne skvrny'). cond(25,'ma dlouhe nohy'). cond(26,'ma dlouhy krk'). cond(27,'ma rohy'). cond(28,'meci'). cond(29,'beci'). cond(30,'ma chobot'). cond(31,'ma na nose roh'). cond(32,'zije ve vode'). cond(33,'neleta'). cond(34,'leta dobre'). cond(35,'plazi se'). cond(36,'ji se k vanocum'). cond(37,'je dlouhy a uzky'). cond(38,'zije v rybniku'). cond(39,'ma krunyr'). cond(40,'preplaval Nil').

22 Ukázka diagnostického expertního systému – inferenční mechanismus
zvirata:- go(zvire). zvirata:-write('Jsem zmaten, nevim, co to je'). go(Odhad ):- not(rule(_,Odhad,_,_)),!,nl, write('Myslim, ze to je:'),write(Odhad). go(Odhad ):- rule(_,Odhad,Novy_odhad,Podminky), kontrola(Podminky), go(Novy_odhad). kontrola([Podminka|Zbytek] ):- cond(Podminka,TEXT), zeptejse(TEXT), kontrola(Zbytek). kontrola([]). zeptejse(TEXT):- write('je pravda ze '), write(TEXT), write(' (a./n.) :'), read(ANSWER),!, ANSWER='a'.

23 Vlastní neprocedurální program (motivace)
Jiný klasifikační expertní systém Dopracování rodinných vztahů Konečné hry (piškvorky, NIM,…) Albegrogram „Einsteinova úloha“ Bludiště, hledání cesty, prohledávání stavového grafu Hlavolamy (Lloydova 15, Rubikova kostka,…)


Stáhnout ppt "Rekurze Predikát predek(X,Y)."

Podobné prezentace


Reklamy Google