Seznamy, aritmetika
Aritmetika v Prologu Predikát is – soucet (A,B,C) :- C is A+B. – soucin (A,B,C) :- C is A*B.
Zjistit, zda je číslo X sudé sude_cislo(X) :- soucin(2,Y,X).
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).
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, X*X+Y*Y = Z*Z
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.
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.
Seznam seznamhlavatělo [a,b,c,d,e]a[b,c,d,e] [[a,c],b,d,e][a,c][b,d,e] [[a,[b,c]],d,e][a,[b,c][d,e] [a]a[] --
Je element prvkem seznamu?
prvek(H,[H|_]). prvek(X,[_|T]):-prvek(X,T).
Spojení dvou seznamů spoj([ ],Sez,Sez). spoj([X|T1],T2,[X|T3]):-spoj(T1,T2,T3).
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]).
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]).
Ř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.
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]).
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').
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'.