Deklaratív programozás

Hasonló dokumentumok
Ì ÖØ ÐÓÑ ½ Ú Þ Ø ¾ Ã Ð Ò Ð Ö ÞÓÐ Ñ Ó ËÞ Ò Ö ÞÓÐ Æ ÒÝ Ú ÒÝ Þ Ù Þ ÈÖÓ Ö ÑÓ Þ Ó Ð Ð

Ð Þ Ù Þ Ø Ö Ý ÐÓ ÞØ Þ Ø Ö Ý Ø ÖÑ Þ ØØÙ ÓÑ ÒÝÓ Ý Ð Ô Ö ÀÓ Ý Ò Ñò Þ ÙÒ Ú ÖÞÙÑ Ð ÔÚ Ø Ó ÐÑ Ø Ö ÒÝ Ñ Þ Ò Ö Ö Ú Ø º

f ij = f i. f.j Ö f 11 = 49 f 12 = 64 f 13 = 84 f 1. = 197

Þ Þ Ø ØØ Ú ÐÐ ÑÓ Ð Þ Ø Þ Þ Ø ØØ Ú ÐÐ ÑÓ Ð Þ Ø Ð ÓÒØÓ ÐÐ ÑÞ Ó Ý Ð Þ Ó Ú Ò¹ Ò Þ Ö Ñ Ö Òº Èк Ý ØÐ Ò Ø Ð ÔÖ Ø ÞÞ Ð ÑÔ Ø Ô ÓÐÙÒ ¾¹½½º Ö µ Ú Ý Ï Ø ØÓÒ ¹ ¾¹

Ð Þ Ù Þ Ø Ö Ý ÐÓ ÞØ Þ Ø Ö Ý Ø ÖÑ Þ ØØÙ ÓÑ ÒÝÓ Ý Ð Ô Ö ÀÓ Ý Ò Ñò Þ ÙÒ Ú ÖÞÙÑ Ð ÔÚ Ø Ó ÐÑ Ø Ö ÒÝ Ñ Þ Ò Ö Ö Ú Ø º

ÍÅÄ Ð ØÓ

ØÔ ÐÙ ØÔ ÐÙ Ø Ú Þ Ø Ð Ö Ò Ð Þ Ð Þ ØÖ Þ ¾¹¾½º Ö µº Ä Ø Ý ØÐ Ò Ð Ñ Ôк ÐÐ Ò ÐÐ Ú Ý Ø Ð Ô Ø ºµ Ð Ø Ó Ð Ñ Ð Ð Ô Ð Ô ÓÐ º Þ Ð Ø Ð Ñ Þ ÙØ Ø Þ Ø ØØ ØÔ ÐÙ Ò Ò

¹ÐÓ Ó ¹ ÐÔ Ö ÓÐ Ô ÓÐ Ø ÓÖÓ È Ø Ö Ä ÑÔ ÖØ Å Ø Å Ò ÓÖ ¾¼¼ º½¾º½½º ÓÖÓ È Ø Ö Ä ÑÔ ÖØ Å Ø Å Ò ÓÖ ¹ ÐÔ Ö ÓÐ Ô ÓÐ Ø

ËÔ ÑÊ Ò À ÓÒÐ Ö ÆÝ ÐÚÑÓ ÐÐ Ã Ö ÐÑ ËÙÑÑ ÖÝ Ï Ô Ñ ÞòÖ Ñ Þ Ö ÐÓ ÒÝ Ã ÖÓÐÝ ÄÌ ÁÃ ÁÒ ÓÖÑ Ø Ó ØÓÖ Á ÓÐ ÅÌ Ë Ì ÃÁ ÁÒ ÓÖÑ Ø ÃÙØ Ø Ð ÓÖ Ø Ö ÙÑ Ì Ñ Ú Þ Ø º ÒÞ Ö

ÓÑ Ã Ø Ð ÔÚØ Ó ÐÓÑ Þ Ð Ü Ò Ö ÔÓÐ ÒÓÑ ÐÓ Ö ÓÑÓÐ ÃÓÑ Ò ØÓÖ Ù Ñ Þ Ö Ð ÓÑ ÒÚ Ö Ò Ó Ð ÓÒÝ Ñ ÒÞ ØÓÔÓÐ ÓÑ Ò ØÓÖ ËØ Ô Þ Ò Ö Ê ÒÝ Ð Ö Å Ø Ñ Ø ÃÙØ Ø ÒØ Þ Ø ¾¼¼

t = 0 R i L i s i s + u v 3R + u v u u v = 3u 4 + 3R 4 i s R = 0 u Li L R u = 4R 3 i L +R i s = i L i L + u 2R + u u v dt = 7R 3L i L + R L i s

Ú Þ Ø Þ Ô Ð Ò Þ Ú Ñ Ò ÞÔÓÒØ Þ ¹ Ö Ô Ø Ø ÞÓØØ Þ Ð Ö Ú Þ Ð ØÓ Òº ËÞ ÑÐ Ð Ø Ò Þ ÐÚ Þ Ú ÐØÓÞ Ð ÑòÚ Ð Ø Ð Ð Ð Ô Ø ØØ ÓÐÝ Ò Ð¹ ÓÖÓÞ ØÓ Ñ ÐÝ ÓØØ Ø ÔÙ Ð Ö Ø Ò

Ψ = α 0 > +β 1 > ØÓÚ α 2 + β 2 = 1. Ψ = cos θ 2 0 > +eiϕ sin θ 2 1 >

Ð ØÖÓÑ Ò Ø Ö ÎÁº ÆÝ ØÖ Ý Ö ÐÝ ÈÌ ÈÅÅÁà ΠÐÐ ÑÓ À Ð Þ ØÓ Ì Ò Þ ¾¼½ º Ð Ù º

(rot. j n df. Hd s = F. H) n df = F. j n df = n j n df, Hd s = ni.

Å Ò Ñ Ò Ð Þ ËÞ Ð Á ØÚ Ò ÄÌ Ã Ñ ÁÒØ Þ Ø Ôº ½

½º Å rot H = 0, H t2 H t1 = 0 H t2 = H t1, ¾º Å div D = ρ D n2 D n1 = η. º Å rot E = 0 E t2 E t1 = 0, º Å div B = 0 B n2 B n1 = 0.

rot H = j, 1. div D = ρ, 2. rot E = 0, 3. div B = 0. 4.

Å Ò Ñ Ò Ð Þ ËÞ Ð Á ØÚ Ò ÄÌ Ã Ñ ÁÒØ Þ Ø Ôº ½

Ì ÖØ ÐÓÑ ÝÞ Áº Ú Þ Ø ÐØ Ð ÒÓ Þ ÐÝÓ ½º Þ ÐÝ ÒÝÚ Þ Ñ ÐÝ Ø ÐÝ ¾º Ö ¾º½º Ö Ø Ö º º º º º º º º º º º º º º º º º º º º º º º º º º º º ¾º¾º Ö Ó ÐØ Ð ÒÓ Ð

X 1 (x i ) º. X 1 (], b]) º. ], a 1 ], ]a 1, a 2 ],...,]a p 1, a p ], ]a p, + ], j=1. i i

À Ì ÒØ Ö ÖÓÑ ØÖ ÞÒ Ð Ø Ò Þ ÓÒ Þ Ò Ã Ö Å Ò Þ Ù ÅË ½º Ú ÓÐÝ Ñ ¾¼½½º Ó Ø Ö ½ º

2 Å Ø Ð ÒØ Þ Ó Ý Ý Ö Ð ØÖ ÒÞ Ø Ú Þ ÑÑ ØÖ Ù ÐÐ ØÚ ÓØ Ñ Þ äþ Ð Ñ Þ Ñ Ö Ð Ò Ñ Ð Å Ø Ð ÒØ Þ Ó Ý Ý Ö Ð ÒØ Þ ÑÑ ØÖ Ù ÐÐ ØÚ ØÖ ÓØ Ñ Þ äþ Ð Ñ Þ Ñ Ö Ð Ò Ñ Ð Å

dc_869_14 ÅÌ Ó ØÓÖ ÖØ Þ Ø Þ Æ Ñ¹ Ý Ò ÐÝ Ò Ñ Ð ÓÒÝ Ñ ÒÞ Ú ÒØÙÑ Ö Ò Þ Ö Ò Ö Ð Þ Ù Ô Ø Åò Þ Þ ØÙ ÓÑ ÒÝ Ý Ø Ñ ¾¼½

) ξi (t i t i j i


U = I R U = RI. I = [V ]

E0 sin ωt, D = ǫ. σ ν2πǫ, ǫ 1, σ ( ) 1 s.

x = 10±0.1 y = 5±0.02 z = 20±0.4

D = ǫ0 ǫ r. ½º Å rot H = j + ρ v + D. rot H = j + ρ v + ǫ 0 ǫ r. Erot H = E j Eρ v Eǫ 0 ǫ r. ρ( v, E) = Erot H Hrot E ( j, E) ǫ 0 ǫ r

Ú Þ Ø ÐÐ Þ Ð ÐØ Ð Ø Ñ Ú ÞØ Ø ÒÙÐÑ ÒÝÓÞ ÙÐ ÓÒØÓ ÐÐ ¹ Ð ÓÐÝ Ñ Ø Ò Ñ ÖØ Þº Ø Ñ Ú ÞØ Ñ ÖØ ÐРРй Ð ÔÓØ Ø Ð Ú Ö Ö ÐÐ Ó Ø Ò Ø Ò Ý Ö Ò Ð Ñ Ð ÓÖÓÞ Ø ÐÐ Ó Ò Ð

e = ρ( r )dv. N = D n df.


x 2 a b c d a b c d e x 1 O R O L O C ϕ(a d f) O R ϕ(b c) O L ϕ(b c e) O L ϕ(l R) (R 2 \ E) ϕ(l M R) (R 2 \ E)

Deklaratív programozás

t = c U, t0 = x 0 t = c (1+U/c), c (1 U/c) U x δt B = 1 2

Å Ò Ñ Ò Ð Þ ËÞ Ð Á ØÚ Ò ÄÌ Ã Ñ ÁÒØ Þ Ø Ôº ½

dc_603_12 E N = (e 1,e 2,...,e N ) e a+jb. e a+jb, W(E N ) a,b,t N 1 a a+(t 1)b Nº V(E N,M,D) e n+d1 e n+d2,...e n+dl t 1 j=0 N,t,a,b) = max n=1

Ì ÓÑÔÙØ Ø ÓÒ Ð ÓÑÔÐ Ü ØÝ ÓÐÙÑÒ Ý Â Ó Ó ÌÓÖ Ò Ôغ Ì ÓÖ Ø ÁÒ ÓÖÑ Ø ÍÒ Ú Ö ØØ ÍÐÑ Ç Ö Ö Ð Ö ¼ ÍÐÑ ÖÑ ÒÝ ØÓÖ Ò Ò ÓÖÑ Ø ºÙÒ ¹ÙÐѺ ØØÔ»»Ø ÓÖ º Ò ÓÖÑ Ø ºÙÒ ¹

x T i x j = δ ij, 1 i, j k, ¾µ

1 + e β(x d). 0, x a δ/2 x (a δ/2), a δ/2 < x < a + δ/2 1, a + δ/2 x. σ ( β)

Ì ÖØ ÐÓÑ ÝÞ Ì ÖØ ÐÓÑ ÝÞ Ú Þ Ø ½ Ð ØòÞ º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º Þ ÖØ Þ Ð Ô Ø º º º º º º º º º º º º º º º

Szupernóvák. van H. nincs H. I nincs Si. van Si. nincs He. van He IIL IIP. IIn

Ë ÓÐÝ Ñ ØØ Ò Áº ÅÓ ÐÐ Þ Öº Ê Ú Ò Ö Ý Ø Ñ Ó Ò Å ¾¼½

ÄÓ Þ Ñ Ø ÐÑ Ð Ø Þ Ñ Ø ÐÑ Ð Ø Ö Þ Ö ÝÞ Ø Ð Öº Þ ÓÐØ ÍØÓÐ Ñ Ó Ø ¾¼¼ º Ñ Ö ¼º

Ö ÒÝ Ô Ö Ñ Ø Ö Ò Ø Þ ÑÓÞ Ö ÙØÓ Ø Ð Ø Ù ÖÓÒØÓ Ò Ó ØÓÖ È µ ÖØ Þ Ì Ø Ì Ñ Ö Ì Ñ Ú Þ Ø Öº Ì Ø ý ÓØ Öº ÀÓÖÚ Ø Þ Ã ÖÒÝ Þ ØØÙ ÓÑ ÒÝ Ó ØÓÖ Á ÓÐ Ë Ì ÌÌÁÃ Þ Ã Ñ

¾¼½ ¹½ Þ Ð Ú Ð ½º Ð ½¹ ¾ Þ ÔØ Ñ Ö ½ ºµ ¾º Ð ¹ Þ ÔØ Ñ Ö ¾ ºµ º Ð ¹½¼ Ó Ø Ö ºµ º Ð ½¼ ¹½¾ Ó Ø Ö ½½ºµ º Ð ½¾ ¹½ ½ Ó Ø Ö ½ ºµ º Ð ½ ¾¹½ Ó Ø Ö ¾ ºµ º Ð ½ ¹


Å ÖÓ ÓÒÓÑ Ø Ð ØÝ ÌÖ Ò Ø ÓÒ ØÓÛ Ö Ø ÙÒ Ð Ø Ö Ð Ô Ö ÒØ º Ö Þ Ö ÒØ º Ö Þ Ò ºÞ ÒØ Ö ÓÖ ÓÒÓÑ Ê Ö Ò Ö Ù Ø Ù Ø ÓÒ Ó ÖÐ ÍÒ Ú Ö ØÝ Þ Æ Ø ÓÒ Ð Ò ½ ÂÙÒ ½¾ ¾¼¼ ½

Ð Þ Þ ØÓÒ Þ Ö ØÒ Ñ Ñ Þ ÒÒ Ø Ñ Ú Þ Ø ÑÒ ÓÒ Â ÒÓ Ò Þ ÑÓÑÖ Þ Ò Ú Ø Ñ ÐÚ Ø Ø Ô Ø ÞÖ Ú Ø Ð Ø Þ ÑÙÒ Ò ÓÖ Òº À Ð Ú Ð Þ Ò ØØ Ð Ø ÖØÓÞÓÑ Ñ Ð ÓÑÒ ÓÐ ÓÞ Ø Ñ Ö ÓÞ

Ã Þ ÐØ Ö Ò Ý Ø Ñ Þ ÌÙ ÓÑ ÒÝÓ Ó ØÓÖ Á ÓÐ Ò ËÞ Ð Ö Ø Ø Þ ÒÝ ØÙ ÓÑ ÒÝ ÔÖÓ Ö Ñ Ö Ø Ò ÈÖ Ô Ö Ø Ø ÍÒ Ú Ö ØÝ Ó Ö Ò È Ë ÓÓÐ Ò È Ý



ÃÓÑÔÐ Ü Ú ÒÝ Þ Ò Ö ÞÓÐ Ì Ã ÓÐ ÓÞ Ø Ä Ä Ú ÒØ ØØÔ»»ÐÓ ºÛ º ÐØ º Ù Ì Ñ Ú Þ Ø Ë ÔÔ Ö Ò ¾¼¼ º ÒÓÚ Ñ Ö

ÊýÊÎýÄÄ ÄÃÇ ýëçã ÁÆÆÇÎý Á Ê Ã Æ Ë Ä¹ Ä Ä Á Ê Á Æ ÃÙØ Ø Ð ÒØ ÊÇËË Ä Å ¼ Å Ã ÁÆÆÇ Öº Ò ¹Ã ýöô Öº Ó Ò Ö Ã ÖÓÐÝ Ã ÃÖ ÞØ Ò Öº ÀÓÖÚ Ø Â Þ ËÞ ÌÙ ÓÑ ÒÝ Ý Ø Ñ

Æ ÁÄ ÌÃÇ Ì Æ Ú Ã ÓÖ ÄÌ Ì ÖÑ Þ ØØÙ ÓÑ ÒÝ Ã Ö Þ Þ µ Ð ÐÑ ÞÓØØ Þ Ù Þ Ö ÒÝ ÌÊ ÞÓÒÓ Ø ÃÁ Ç Ìº ÄÌ ËÞ ÓÐ ÓÞ Ø Ñ ËÓ Þ Ð ÔÖÓÔÓÖ ÓÒ Ð ÑÖ Ð ÞØ Ö Þ Þ Ø ØÓÖÓ ÓÞ Þ

v 3 v 4 v 8 v 10 v 9 v 11 v 7 v 1 v 2 v 5 v 6

σ m α η e m η m η N η ) α m η m η T cond

È Ö ÙÞ ÑÓ ØÓØØ Ú Ð Ñ¹Ñ Þ Ö ØÓÐØ Ð ØÖÓ Ò Ñ ÔÖÓ Ð Ñ Ñ ÓÐ Ò ÖØ Å Ö Ò Ð Ç Ð Ú Ð Ñ ØÖÓÒ Ñ ÖÒ ÃÓÒÞÙÐ Ò ÈÖÓ º Öº ÃÙÞÑ ÒÒ Å Ð ºËº Ý Ø Ñ Ø Ò Ö ËÞ ÒÝ Á ØÚ Ò Ý Ø

F V (n) = 2 2n (n N 0 )º

ËÞ Ò ÃÓÑÔÐ Ü Ú ÒÝ Æ ÝÔÖÓ Ö Ñ Ó ÙÑ ÒØ Ä Ä Ú ÒØ ÈÖÓ Ö ÑØ ÖÚ Þ Å Ø Ñ Ø Ù Æ ÔÔ Ð µ ØØÔ»»ÐÓ ºÛ º ÐØ º Ù ÄÇÄÄ Ìº ÄÌ ÃÓÒÞÙÐ Ò ËÞ Ð Ä ÞÐ ÄÌ ÁÒ ÓÖÑ Ø Ã Ö ¾¼¼ º




Ì ÖØ ÐÓÑ ÝÞ ½º Ú Þ Ø ½º½º Þ Ó Ø Ø ØÖÙ Ø Ö ÐØ º º º º º º º º º º º º º º º º º º º º º º º º ½º¾º Ø Ø ÓÒ ÓÞ Ð Ø º º º º º º º º º º º º º º º º º º º

È ÖÑÙØ ÓÖ ÓÐ Ó Ð ÐÑ Þ ÅÌ Ó ØÓÖ ÖØ Þ ÒØ Ý È Ø Ö

ËÞ Ñ Ø ÐÑ Ð Ø Ö ÝÞ Ø Ð Öº Þ ÓÐØ ÍØÓÐ Ñ Ó Ø ¾¼¼ º ÒÙ Ö ¾ º

Ë Ø ÙØÓÑ Ø ÞÓ Ó Ò Ñ Ð ÐÑ Þ Ó ØÓÖ È º ºµ ÖØ Þ ÃÓ Ö ÐÝ Ì Ñ Ú Þ Ø Öº ËÞØÖ Â ÒÓ Öº ÃÙÒ Ö Ò Ö Ò Ý Ø Ñ Ì ÖÑ Þ ØØÙ ÓÑ ÒÝ Ó ØÓÖ Ì Ò ÁÒ ÓÖÑ Ø ÌÙ ÓÑ ÒÝÓ Ó ØÓÖ Á

Þ Ö ÓÓ Ò ÓÖÑ Ö Ò Þ Ö Ó ØÓÖ È º ºµ ÖØ Þ Ê Ú ÒÝ Ì ÓÖ ÓÐØ Ì Ñ Ú Þ Ø Öº ÃÓÖÑÓ Â ÒÓ Ö Ò Ý Ø Ñ Ì ÖÑ Þ ØØÙ ÓÑ ÒÝ Ó ØÓÖ Ì Ò ÁÒ ÓÖÑ Ø Ó ØÓÖ Á ÓÐ Ö Ò ¾¼½¼

Ì ÖØ ÐÓÑ ÝÞ Ã Þ Ò ØÒÝ ÐÚ Ò Ø Ú Þ Ø Ê Ú Ø ½¾ ½º Ê Ò Þ ØÐ Ò ÓÒ ÒÞ ÐØ Þ Ó Ò ½ ½º½º Ó ÐÑ º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º

½ ¾ À Ú Ø ÓÞ Ó ÓÐ ÓÞ ØÓ Ò Ú ÓÖ Þ Ö ÒØ Þ Ð Â ÒÓ ËÓÑ ÙÒ ÓÐÚ ÔÖÓ Ð Ñ Ò Ø Ø ÓÖÝ Ó ÙÒØ ÓÒ Ð ÕÙ Ø ÓÒ ÁÁº ÕÙ Ø ÓÒ Å Ø º ¾ ½ µ ¾ ß¾ ¼º Þ Ð Â ÒÓ Ö Ø Ö Þ Ò Ò ÓÖ

¾

Ë Á ÌÍ ÇÅýÆ Ì Å Ì ÊÅ Ë ÌÌÍ ÇÅýÆ Á Ë ÁÆ ÇÊÅ ÌÁà Á Ã Ê ËÞÙÔ ÖÒ Ú ¹ÖÓ Ò Ó ÓÞ Ô ÓÐ ÔÓÖ ÔÞ Ú Þ Ð Ø Ì Ã¹ ÓÐ ÓÞ Ø ÖÓ ËÞ ÒÒ ÁÁÁº Ú Þ Ë Þ Ó ÐÐ Ø Ë Ì ÌÌÁÃ Ì Ñ Ú

Ò Ö ÐÝ ÅÁÇÆ Ä Ê Ã Ê Ë Ã Ì ÃÁËÄ Ë Ã Æ È ÖØ Þ Ì Ñ Ú Þ Ø Ê Þ Ã ÖÓÐÝ Þ ØÙ ÓÑ ÒÝ Ó ØÓÖ ËÞ ÌÙ ÓÑ ÒÝ Ý Ø Ñ ¹ ÇÔØ ÃÚ ÒØÙÑ Ð ØÖÓÒ Ì Ò Þ ÅÌ ËÞ Ð Ö Ø Ø Þ ÇÔØ ÃÙØ

Ì ÖØ ÐÓÑ ÝÞ ½º Ú Þ Ø ½ ¾º ÁÖÓ ÐÑ ØØ ÒØ º à ÖÐ Ø Ö Þ ½ º½º Ö Ø Ò Ð Ý Þ Ø Ø Ð º º º º º º º º º º º º º º º º º º º º º º º º º ½ º½º½º Ò ØÖ Ùѹ ÐÓÖ Ø Ø

rot H = J + D div D = ρ, w = 1 2 E D H B,


à ÚÓÒ Ø ¾¼¼ ¹ Ò Ð ØÖ ØØ Ý Ý ØØÑò Þ ØÚ ÄÓÖ Ò ÌÙ ÓÑ ÒÝ Ý Ø Ñ Þ ÅÌ Ê Þ ¹ Å Þ ÃÙØ Ø ÒØ Þ Ø Þ ØØ Ñ ÐÝ ÞØ ÐØ ò Ø ØÓÖÓ Ð ÞØ Ú Ð Ó Ð Ð ÓÞ º ÓÔÓÖØ Ê Ê µ Ø ÒØ Ð

Ì ÖØ ÐÓÑ ÝÞ ½º Ú Þ Ø ½ ¾º Ì Þ º ÊÅ ÊÅ ¹ Ê À ÑÓ ÐÐ Ô Ö Ñ Ø Ö Ð º½º ÊÅ ÊÅ ¹ Ê À ÑÓ ÐÐ º º º º º º º º º º º º º º º º º º º º º º º º½º½º ÊÅ ÑÓ ÐÐ º º º

t 2 t 1 x(t + t) x(t). t v(t) = (v x (t), 0, 0)

Ã Þ ÐØ Ö Ò Ý Ø Ñ Þ ÌÙ ÓÑ ÒÝÓ Ó ØÓÖ Á ÓÐ Ò ËÞ Ð Ö Ø Ø Þ ÒÝ ØÙ ÓÑ ÒÝ ÔÖÓ Ö Ñ Ö Ø Ò Þ ÖØ Ð Þ Ø Ø ÌýÅÇȹ º¾º¾» ¹½¼»½¹¾¼½¼¹¼¼¾ Þ Ñ ÔÖÓ Ø Ø ÑÓ ØØ º ÔÖÓ Ø Þ

Ì Ò Ö Þ ÓÐ ÓÞ Ø Ì ÒÙÐÑ ÒÝ Ú Ð Þ Òò Þ Ñ Ø Ø Ò Ø Ï ÒØ Ö ÐÝ Ñ Ø Ñ Ø Ø Ò Ö Å Ð Ú Ð Þ ÄÌ ÈÈÃ Ì Ñ Ú Þ Ø Î Ö ÐÝ Ú ¾¼½

ËÞ ÌÙ ÓÑ ÒÝ Ý Ø Ñ ÌÌÁÃ ÇÔØ ÃÚ ÒØÙÑ Ð ØÖÓÒ Ì Ò Þ Ë Ã ÇÄ Ç Ì ËÞÙÔ ÖÒ Ú ¹ÖÓ Ò Ó ÓÞ Ô ÓÐ ÔÓÖ ÔÞ Ú Þ Ð Ø Ã Þ Ø ØØ ÖÓ ËÞ ÒÒ Þ Ë Þ Ó ÐÐ Ø Ì Ñ Ú Þ Ø Öº ËÞ Ð Ì

Ã Þ ÐØ Ö Ò Ý Ø Ñ Þ ÌÙ ÓÑ ÒÝÓ Ó ØÓÖ Á ÓÐ Ò Å Þ ÔÖÓ Ö Ñ Ö Ø Ò Å Ý Ö ÌÙ ÓÑ ÒÝÓ Ñ ØÓÑÑ ÙØ Ø ÁÒØ Þ Ø Ò ÅÌ ¹ ØÓÑ µ

170 XIII. Magyar Számítógépes Nyelvészeti Konferencia

y n = c T nx n c n = [c k,n ] = e j2πf kn, k = 1...N f N k+1 = f k, fn+1 = 0, k = 1...N µ

) ) γ dense 2. γ = E(G) / 2. v i A, N (v i ) (1 ǫ) B,aholN (v i ) B µ

Pr(X 1 = j X 0 = i) Pr(T 1 < t X 0 = i) Pr(X 1 = j, T 1 < t X 0 = i) = Pr(X 1 = j X 0 = i) = [( D 0 ) 1 D 1 ] ij. Pr(T 1 < t X 0 = i) = [e D0t 1I] i

g IJ (G) = η IJ, Γ I JK(G) = 0 ½º½µ

Ø Ð ÐÐ Ó Ø Ö Ò Ò Ó ØÓÖ ÖØ Þ ËÞ ¹ Ð ÐÞ ØÚ ÄÓÖ Ò ÌÙ ÓÑ ÒÝ Ý Ø Ñ Ì ÖÑ Þ ØØÙ ÓÑ ÒÝ Ã Ö Þ Ó ØÓÖ ÓÐ Ê Þ Þ ÐÐ Þ Ø ÔÖÓ Ö Ñ Ó ØÓÖ ÓÐ Ú Þ Ø Öº È ÐÐ Ä ÞÐ Ó ØÓÖ Ô

Ì ÖØ ÐÑ Þ Ó Ð Ð Þ ÜÓ ÓÐÝ ÙØ Ø ÐÐ Þ Ø Ý Ð Ö Ø Ø Ð Ò ÑÓÒ Ø Ù Ð ¹ ÒØ ÒÞ Ú Ò Ð Ú Ú ÐØ Þ ÙØ Ø ÚØ Þ Òº Ø ÚÓÐ ÐÐ Ó Ö Ð Ö Ò ÓÐÝ Ö Ò Þ Ö Ñ Ñ Ö ÝÖ ÖÒÝ ÐØ Ô Ø Ø

Egyéb természetes 26% Radon 55% Orvosi diagnosztika 11% Radioaktív gyógyszer 4% Fogyasztási cikkek 3% Egyéb 1%

ÅÇ ÊÆ ÃÇ ÅÇÄ Á Ë ý Á Ë ÆÌÊÇÈÁÃÍË ÄÎ Ã Ó ØÓÖ ÖØ Þ ÖØ À Ø ÓÐØ Ì Ñ Ú Þ Ø Öº Ð Þ Ð Ý Ø Ñ Ø Ò Ö ÄÌ ÌÌÃ ÐÐ Þ Ø Ì Ò Þ Þ Ó ØÓÖ ÓÐ Á ÓÐ Ú Þ Ø Öº ÀÓÖÚ Ø Ð Ò Ý Ø

γ(m,r)k r,0 e Er 1 β r k r,0 e Er

F(x) α,β = 1. f(x) α,β = α β. = αβα

ÝÞ Ø Ô Ø Ñ ÖÒ ÖÒÝ Þ Ø Ñ ÖÒ ÐÐ Ø Ò ¾¼¼¾º½¾º¾¾º Ú ÐØÓÞ Ø Ë ÑÓÒ Ã ÖÓÐÝ ¾¼¼¾º½¾º¾¾

À Ö¹ÒÙÐÐ ÐÑ ÞÓ Ñ Ó Ø Ö ÓÒÞ ÞØ Ò Ø Ö Þ ÒØÓÖ ÐÑ ÞÓ ÓÒ ÔÐÓÑ ÑÙÒ Ã Þ Ø ØØ ËÞÐ ÓÐØ Ò Ñ Ø Ñ Ø Ù Þ Ì Ñ Ú Þ Ø Ð Å ÖØÓÒ Ý Ø Ñ ÙÒ ØÙ Ò Ð Þ Ì Ò Þ ØÚ ÄÓÖ Ò ÌÙ ÓÑ

einsteini newtoni Az adó nyugszik Mindegy A vevõ nyugszik

Magyar utca. Muzeum krt. Realtanoda u Astoria. Kossuth Lajos u

t 2 t 1 x(t + t) x(t). t v(t) = (v x (t), 0, 0)

Átírás:

DP-1 Deklaratív programozás Hanák Péter Ò Ò º Ñ º Ù Irányítástechnika és Informatika Tanszék Szeredi Péter Þ Ö º Ñ º Ù Számítástudományi és Információelméleti Tanszék (Követelmények)

KÖVETELMÉNYEK, TUDNIVALÓK

Deklaratív programozás: tudnivalók DP-3 Honlap, levelezési lista Honlap: ØØÔ»» Ôº غ Ñ º Ù Levlista: ØØÔ»»ÛÛÛº غ Ñ º Ù»Ñ ÐÑ Ò»Ð Ø Ò Ó» Ô¹Ð. A listatagoknak szóló levelet a Ô¹ÐÛÛÛº غ Ñ º Ù címre kell küldeni. Csak a feliratkozottak levele jut el moderátori jóváhagyás nélkül a listatagokhoz. Jegyzet Szeredi Péter, Benkő Tamás: Deklaratív programozás. Bevezetés a logikai programozásba (1000 Ft) Elektronikus változata elérhető a honlapról (ps, pdf) A nyomtatott változat KORLÁTOZOTT SZÁMBAN megvásárolható a SZIT tanszék V2 épületbeli titkárságán a V2.104 szobában, Bazsó Lászlónénál, 10:30-12:00 (hétfő-péntek) és 13:30-15:30 (hétfő-csütörtök). Kellő számú további igény esetén megszervezzük az újranyomtatást. (Követelmények)

Deklaratív programozás: tudnivalók (folyt.) DP-4 Fordító- és értelmezőprogramok SICStus Prolog 3.12 verzió (licensz az ETS-en keresztül kérhető) Erlang (szabad szoftver) Mindkettő telepítve van a ÑÔ Ð Òº Ò º Ñ º Ù-n Mindkettő letölthető a honlapról (linux, Win95/98/NT) Webes gyakorló felület az ETS-ben (ld. honlap) Kézikönyvek HTML-, ill. PDF-változatban Más programok: swiprolog, gnuprolog emacs-szövegszerkesztő Erlang-, ill. Prolog-módban (linux, Win95/98/NT) (Követelmények)

Deklaratív programozás: félévközi követelmények DP-5 Nagy házi feladat (NHF) Programozás mindkét nyelven (Prolog, Erlang) Mindenkinek önállóan kell kódolnia (programoznia)! Hatékony (időlimit!), jól dokumentált ( kommentezett ) programok A két programhoz közös, 5 10 oldalas fejlesztői dokumentáció (TXT, TEX/L A TEX, HTML, PDF, PS; de nem DOC vagy RTF) Kiadás a 6. héten, a honlapon, letölthető keretprogrammal Beadás a 12. héten; elektronikus úton (ld. honlap) A beadáskor és a pontozáskor külön-külön tesztsorozatot használunk (nehézségben hasonlókat, de nem azonosakat) A minden tesztesetet hibátlanul megoldó programok létraversenyen vesznek részt (hatékonyság, gyorsaság plusz pontokért) (Követelmények)

Deklaratív programozás: félévközi követelmények (folyt.) DP-6 Nagy házi feladat (folyt.) Kötelező A beadási határidőig többször is beadható, csak az utolsót értékeljük Pontozása mindkét nyelvből: helyes és időkorláton belüli futás esetén a 10 teszteset mindegyikére 0,5-0,5 pont, összesen max. 5 pont, feltéve, hogy legalább 4 teszteset sikeres a dokumentációra, a kód olvashatóságára, kommentezettségére max. 2,5 pont tehát nyelvenként összesen max. 7,5 pont szerezhető A NHF súlya az osztályzatban: 15% (a 100 pontból 15) (Követelmények)

Deklaratív programozás: félévközi követelmények (folyt.) DP-7 Kis házi feladatok (KHF) 3 feladat Prologból is, Erlang-ből is Beadás elektronikus úton (ld. honlap) Kötelező legalább a KHF-ek 50%-ának a beadása Minden feladat jó megoldásáért 1-1 jutalompont jár Gyakorló feladatok Nem kötelező, de a sikeres ZH-hoz, vizsgához elengedhetetlen! Gyakorlás az ETS rendszerben (lásd honlap) Konzultációk Rendszeres számítógép melletti konzultációs lehetőség (Követelmények)

Deklaratív programozás: félévközi követelmények (folyt.) DP-8 Nagyzárthelyi, pótzárthelyi (NZH, PZH, PPZH) A zárthelyi kötelező, semmilyen jegyzet, segédlet nem használható! 40%-os szabály (nyelvenként a maximális részpontszám 40%-a kell az eredményességhez). Kivétel: a korábban aláírást szerzett hallgató zárthelyin szerzett pontszámát az alsó ponthatártól függetlenül beszámítjuk a félévvégi osztályzatba. A korábbi félévekben szerzett pontokat nem számítjuk be! Az NZH az órarendben előírt héten, a PZH az utolsó oktatási hetekben lesz A PPZH-ra indokolt esetben a pótlási időszakban egyetlen alkalommal adunk lehetőséget Az NZH anyaga az addig előadott tananyag. A PZH, ill. a PPZH anyaga azonos az NZH anyagával A zárthelyi súlya az osztályzatban: 15% (a 100 pontból 15) (Követelmények)

Deklaratív programozás: vizsga DP-9 Vizsga Vizsgára az a hallgató bocsátható, aki aláírást szerzett a jelen félévben vagy a jelen félévet megelőző négy félévben A vizsga szóbeli, felkészülés írásban Prolog, Erlang: több kisebb feladat (programírás, -elemzés) kétszer 35 pontért A vizsgán szerezhető max. 70 ponthoz adjuk hozzá a félévközi munkával szerzett pontokat: ZH: max. 15 pont, NHF: max. 15 pont, továbbá a pluszpontokat (KHF, létraverseny) A vizsgán semmilyen jegyzet, segédlet nem használható, de lehet segítséget kérni Ellenőrizzük a nagy házi feladat és a zárthelyi hitelességét 40%-os szabály (nyelvenként a max. részpontszám 40%-a kell az eredményességhez) Korábbi vizsgakérdések a honlapon találhatók (Deklaratív Programozás)

BEVEZETÉS A LOGIKAI PROGRAMOZÁSBA

A logikai programozás alapgondolata LP-11 Logikai programozás (LP): Programozás a matematikai logika segítségével egy logikai program nem más mint logikai állítások halmaza egy logikai program futása nem más mint következtetési folyamat De: a logikai következtetés óriási keresési tér bejárását jelenti szorítsuk meg a logika nyelvét válasszunk egyszerű, ember által is követhető következtetési algoritmusokat Az LP máig legelterjedtebb megvalósítása a Prolog = Programozás logikában (Programming in logic) az elsőrendű logika egy erősen megszorított résznyelve az ún. definit- vagy Horn-klózok nyelve, végrehajtási mechanizmusa: mintaillesztéses eljáráshíváson alapuló visszalépéses keresés.

Az előadás LP részének áttekintése LP-12 1. blokk: A Prolog nyelv alapjai Logikai háttér Szintaxis Végrehajtási mechanizmus 2. blokk: Prolog programozási módszerek A legfontosabb beépített eljárások Fejlettebb nyelvi és rendszerelemek Kitekintés: Új irányzatok a logikai programozásban

A Prolog/LP rövid történeti áttekintése LP-13 1960-as évek Első tételbizonyító programok 1970-72 A logikai programozás elméleti alapjai (R A Kowalski) 1972 Az első Prolog interpreter (A Colmerauer) 1975 A második Prolog interpreter (Szeredi P) 1977 Az első Prolog fordítóprogram (D H D Warren) 1977 79 Számos kísérleti Prolog alkalmazás Magyarországon 1981 A japán 5. generációs projekt a logikai programozást választja 1982 A magyar MProlog az egyik első kereskedelmi forgalomba kerülő Prolog megvalósítás 1983 Egy új fordítási modell és absztrakt Prolog gép (WAM) megjelenése (D H D Warren) 1986 Prolog szabványosítás kezdete 1987 89 Új logikai programozási nyelvek (CLP, Gödel stb.) 1990... Prolog megjelenése párhuzamos számítógépeken Nagyhatékonyságú Prolog fordítóprogramok...

Információk a logikai programozásról LP-14 A legfontosabb Prolog megvalósítások: SWI ØØÔ»»ÛÛÛº Û ¹ÔÖÓÐÓ ºÓÖ» Prolog: SICStus ØØÔ»»ÛÛÛº º» ØÙ Prolog: GNU ØØÔ»»Ô Ù ÐÐ º ÒÖ º Ö» Þ» ÒÙ¹ ÔÖÓÐÓ» Prolog: Hálózati információforrások: The WWW Virtual Library: Logic Programming: ØØÔ»»ÛÛÛº Ѻ Ùº ºÙ»ÐÓ ¹ÔÖÓ CMU Prolog Repository: ØØÔ»»ÛÛÛº ºÑÙº Ù»»»ÔÖÓ Ø» ¹Ö ÔÓ ØÓÖÝ»»Ð Ò»ÔÖÓÐÓ» (a címen belül) Főlap: ¼º ØÑÐ Prolog FAQ: Õ»ÔÖÓÐÓ º Õ Prolog Resource Guide: Õ»ÔÖ ½º Õ, Õ»ÔÖ ¾º Õ

Magyar nyelvű Prolog irodalom LP-15 Farkas Zsuzsa, Futó Iván, Langer Tamás, Szeredi Péter: Az MProlog programozási nyelv. Műszaki Könyvkiadó, 1989 jó bevezetés, sajnos az MProlog beépített eljárásai nem szabványosak. Márkusz Zsuzsa: Prologban programozni könnyű. Novotrade, 1988 mint fent Futó Iván (szerk.): Mesterséges intelligencia. (9.2 fejezet, Szeredi Péter) Aula Kiadó, 1999 csak egy rövid fejezet a Prologról Peter Flach: Logikai Programozás. Az intelligens következtetés példákon keresztül. Panem John Wiley & Sons, 2001 jó áttekintés, inkább elméleti érdeklődésű olvasók számára

English Textbooks on Prolog LP-16 Logic, Programming and Prolog, 2nd Ed., by Ulf Nilsson and Jan Maluszynski, Previously published by John Wiley & Sons Ltd. (1995) Downloadable as a pdf file from ØØÔ»»ÛÛÛº ºÐ Ùº» ÙÐ Ò»ÐÔÔ Prolog Programming for Artificial Intelligence, 3rd Ed., Ivan Bratko, Longman, Paperback - March 2000 The Art of PROLOG: Advanced Programming Techniques, Leon Sterling, Ehud Shapiro, The MIT Press, Paperback - April 1994 Programming in PROLOG: Using the ISO Standard, C.S. Mellish, W.F. Clocksin, Springer-Verlag Berlin, Paperback - July 2003

PROLOG: EGY KIS GYAKORLATI BEMUTATÁS

Példák LP-18 adatbázis jellegű: családi kapcsolatok aritmetika: faktoriális adatstruktúrák: bináris fák

A családi kapcsolatok példája LP-19 Adatok Adottak gyerek szülő kapcsolatra vonatkozó állítások, pl. gyerek szülő Imre István Imre Gizella István Géza István Sarolta Gizella Civakodó Henrik Gizella Burgundi Gizella Feladatok: Definiálandó az unoka nagyszülő kapcsolat, pl. keressük egy adott személy nagyszüleit. Definiálandó az leszármazott ős kapcsolat, pl. keressük egy adott személy őseit.

A nagyszülő feladat C nyelvű megoldás LP-20» Þ Ø Þ» ØÖÙØ Ý Þ ß Ö Ý Ö ÞÙÐÓ Ð ÞÙÐÓ ß» ÙÒÓ Ò Ý Þ Ð Ò Ö Ø» ÁÑÖ Á ØÚ Ò ÁÑÖ Þ ÐÐ ÚÓ Ò Ý ÞÙÐÓ Ö ÙÒÓ µ Þ ß Á ØÚ Ò ØÖÙØ Ý Þ Ñ Ý Þ ÞÙÐÓ Á ØÚ Ò Ë ÖÓÐØ Þ ÐÐ Ú Ó À ÒÖ ÓÖ Ñ Ý Þ¹ Ý Ö Ñ Ý Þµ ØÖÑÔ ÙÒÓ Ñ Ý Þ¹ Ý Ö µµ Þ ÐÐ ÙÖ ÙÒ Þ ÐÐ ß ØÖÙØ Ý Þ Ñ ÞÒ ÞÙÐÓ ÆÍÄÄ ÆÍÄÄ Ð ÓÖ Ñ ÞÒ¹ Ý Ö Ñ ÞÒµ ØÖÑÔ Ñ Ý Þ¹ ÞÙÐÓ Ñ ÞÒ¹ Ý Ö µµ ÔÙØ Ñ ÞÒ¹ ÞÙÐÓµ Ð Ð

A nagyszülő feladat Prolog megoldás LP-21 ± ÞÙÐÓ Ý ËÞµ Ý Þ Ð ËÞº ÞÙÐÓ ³ÁÑÖ ³ ³Á ØÚ Ò³µº ± à ÁÑÖ Ò Ý Þ Ð ¹ Ò Ý ÞÙÐÓ ³ÁÑÖ ³ ÆËÞµº ÞÙÐÓ ³ÁÑÖ ³ ³ Þ ÐÐ ³µº ÞÙÐÓ ³Á ØÚ Ò³ ³ Þ ³µº ÆËÞ ³ Þ ³ ÆËÞ ³Ë ÖÓÐس ÞÙÐÓ ³Á ØÚ Ò³ ³Ë ÖÓÐسµº ÞÙÐÓ ³ Þ ÐÐ ³ ÆËÞ ³ Ú Ó À ÒÖ ³ ÆËÞ ³ ÙÖ ÙÒ Þ ÐÐ ³ ³ Ú Ó À ÒÖ ³µº ÒÓ ÞÙÐÓ ³ Þ ÐÐ ³ ³ ÙÖ ÙÒ Þ ÐÐ ³µº ± Ã Þ ÙÒÓ ¹ Ò Ý ÞÙÐÓ Í ³ Þ ³µº Í ³ÁÑÖ ³ ± Ý Ö Ò Ý Þ Ð Æ Ý ÞÙÐÓº ÒÓ Ò Ý ÞÙÐÓ Ý Ö Æ Ý ÞÙÐÓµ ¹ ÞÙÐÓ Ý Ö ËÞÙÐÓµ ÞÙÐÓ ËÞÙÐÓ Æ Ý ÞÙÐÓµº

A Prolog és az adatbáziskezelés LP-22 Miben különbözik a Prolog egy adatbáziskezelőtől Mivel több? rekurzió összetett adatszerkezetek De: a Prolog egy programozási nyelv pl. nem optimalizálja a részkérdések sorrendjét

Az őse rekurzív kapcsolat LP-23 Egy egyszerű megoldás A szülő ős. A szülő őse is ős. ± Ó Ä Þ Ç µ Ä Þ Ð Þ ÖÑ ÞÓØØ Ç Ó Ä Þ Ç µ ¹ ÞÙÐÓ Ä Þ Ç µº Ó Ä Þ Ç µ ¹ ÞÙÐÓ Ä Þ ËÞµ Ó ËÞ Ç µº Egy alternatív megoldás, diszjunkció használatával Tekintsük sorra a szülőket. Az adott szülő ős. Az adott szülő őse is ős. Ó ½ Ä Þ Ç µ ¹ ÞÙÐÓ Ä Þ ËÞµ Ç ËÞ Ó ½ ËÞ Ç µ µº

A Prolog végrehajtási mechanizmusa dióhéjban LP-24 A Prolog eljárásos szemléletben Egy eljárás: azon klózok összesége, amelyek fejének neve és argumentumszáma azonos. Egy klóz: ¹ Ì ÖÞ, ahol Ì ÖÞ egy célsorozat Egy célsorozat: 1 ººº n, célok (eljáráshívások) sorozata, n 0 Végrehajtás: adott egy program és egy futtatandó célsorozat Redukciós lépés: a célsorozat első tagjához keresünk egy vele egyesíthető klózfejet, az egyesítéshez szükséges változó-behelyettesítéseket elvégezzük, az első célt helyettesítjük az adott klóz törzsével Egyesítés: két Prolog kifejezés azonos alakra hozása változók behelyettesítésével, a lehető legáltalánosabb módon Keresés: a redukciós lépésben a klózokat a felírás sorrendjében (felülről lefele) nézzük végig, ha egy cél több klózfejjel is egyesíthető, akkor a Prolog minden lehetséges redukciós lépést megpróbál (meghiúsulás, visszalépés esetén)

Aritmetika Prologban faktoriális LP-25 ± Ø Æ µ Æ º Ø ¼ ½µº Ø Æ µ ¹ Æ ¼ ƽ ƹ½ Ø Æ½ ½µ ½ ƺ

LP-26 Néhány beépített predikátum Kifejezések egyesítése: : az és szimbolikus kifejezések változók behelyettesítésével azonos alakra hozhatók (és el is végzi a behelyettesítéseket). Kifejezések nem-egyesíthetősége: : az és kifejezések nem egyesíthetőek. Aritmetikai predikátumok à : A à aritmetikai kifejezést kiértékeli és értékét egyesíti -szel. à ½ à ¾ à ½ à ¾ à ½ à ¾ à ½ à ¾ à ½ à ¾ à ½ à ¾: A à ½ és à ¾ aritmetikai kifejezések értéke a megadott relációban van egymással ( jelentése: aritmetikai egyenlőség, =\= jelentése aritmetikai nem-egyenlőség). Ha à à ½ à ¾ valamelyike nem tömör (változómentes) aritmetikai kifejezés hiba. Legfontosabb aritmetikai operátorok: ¹» Ö Ñ»» (egész-osztás) Kiíró predikátumok ÛÖ Ø µ: Az Prolog kifejezést kiírja. ÒÐ: Kiír egy újsort. Egyéb predikátumok ØÖÙ Ð: Mindig sikerül ill. mindig meghiúsul. ØÖ ÒÓØÖ : A (teljes) nyomkövetést be- ill. kikapcsolja.

ØÙ º½¾º Ü ¹Ð ÒÙܹ Ð ¾º µ Ö ÇØ ËÁ ËØÙ ¹ ÓÒ ÙÐØ ÞÙÐÓ µº ÓÒ ÙÐØ» Óѻ٠ֻ ÞÙÐÓ ºÔÐ Ò ÑÓ ÙÐ Ù Ö ¼ Ñ ÝØ ± Ý ¹ Ò Ý ÞÙÐÓ ³ÁÑÖ ³ ³Á ØÚ Ò³µº ÒÓ ¹ Ð Ø Ò Ò Ý ÞÙÐÓ µº ºººµ Ý ¹ Ðغ Programfejlesztési beépített predikátumok LP-27 ÓÒ ÙÐØ Ð µ vagy Ð : A Ð állományban levő programot beolvassa és értelmezendő alakban eltárolja. ( Ð Ù Ö terminálról olvas.) vagy Ð Ø Ò ÈÖ ØÙѵ: Az értelmezendő alakban eltárolt összes ill. adott nevű Ð Ø Ò predikátumokat kilistázza. ÓÑÔ Ð Ð µ: A Ð állományban levő programot beolvassa, lefordítja. A lefordított alak gyorsabb, de nem listázható, kicsit kevésbe pontosan nyomkövethető. ÐØ: A Prolog rendszer befejezi működését. ¼¼ ½¼ ËÌ ¾¼¼

Adatstruktúrák Prologban példa LP-28 A bináris fa adatstruktúra vagy egy csomópont (ÒÓ ), amelynek két részfája van mutat (Ð Ø Ö Ø) vagy egy levél (Ð ), amely egy egészt tartalmaz Binárisfa-struktúrák különböző nyelveken ± ËØÖÙ Ø Ö Ð Ö ¹ Ò ± ØØ ÔÙ ¹Ð Ö ÈÖÓÐÓ Ò ÒÙÑ ØÖ ØÝÔ ÆÓ Ä ± Òº Å ÖÙÖÝ Ð Ð µ ØÖÙØ ØÖ ß ÒÙÑ ØÖ ØÝÔ ØÝÔ ± ¹ ØÝÔ ØÖ ¹¹¹ ÙÒ ÓÒ ß ± ÒÓ ØÖ ØÖ µ ØÖÙØ ß ØÖÙØ ØÖ Ð Ø ± Ð Òصº ØÖÙØ ØÖ Ö Ø Ð ÒÓ ØÖÙØ ß ÒØ Ú ÐÙ Ð Ð Ð Ù Ð

Bináris fák összegzése LP-29 Egy bináris fa levélösszegének kiszámítása: csomópont esetén a két részfa levélösszegének összege levél esetén a levélben tárolt egész ± ÒÝ ÐÚò Ð Ö Ø Úµ Ú ÒÝ ± ÈÖÓÐÓ Ð Ö ÔÖ ØÙѵ ÒØ ØÖ ÙÑ ØÖÙØ ØÖ ØÖ µ ØÖ ÙÑ Ð Î ÐÙ µ Î ÐÙ µº ß ØÖ ÙÑ ÒÓ Ä Ø Ê Øµ ˵ ¹ Û Ø ØÖ ¹ ØÝÔ µ ß ØÖ ÙÑ Ä Ø Ë½µ Ä ØÖ ÙÑ Ê Ø Ë¾µ Ö ØÙÖÒ ØÖ ¹ ٺРºÚ ÐÙ Ë Ë½ ˾º ÆÓ Ö ØÙÖÒ ØÖ ÙÑ ØÖ ¹ ÙºÒÓ ºÐ ص ØÖ ÙÑ ØÖ ¹ ÙºÒÓ ºÖ ص Ð Ð

Bináris fák összegzése LP-30 Prolog példafutás ± ØÙ ¹ ËÁ ËØÙ º½¼º¼ Ü ¹Ð ÒÙܹ Ð ¾º½µ ÌÙ ½ ½ ½¾ ¾ Ì ¾¼¼¾ Ä Ò ØÓ ÍÌ È ÓÙÖ ¹ ÓÒ ÙÐØ ØÖ µº ± ÓÒ ÙÐØ Ò» ÓÑ» Þ Ö»Ô Ð»ØÖ ºÔкºº ± ÓÒ ÙÐØ» ÓÑ» Þ Ö»Ô Ð»ØÖ ºÔÐ Ò ÑÓ ÙÐ Ù Ö ¼ Ñ ¼ ÝØ Ý ¹ ØÖ ÙÑ ÒÓ Ð µ ÒÓ Ð µ Ð ¾µµµ ËÙѵº ËÙÑ ½¼ ÒÓ ¹ ØÖ ÙÑ ÌÖ ½¼µº ÌÖ Ð ½¼µ ÁÒ Ø ÒØ Ø ÓÒ ÖÖÓÖ Ò Ö ÙÑ ÒØ ¾ Ó»¾ Ó Ð ½¼ ¹ Ðغ ± A hiba oka: a beépített aritmetika egyirányú: a ½¼ ˽ ˾ hívás hibát jelez!

Peano aritmetika összeadás LP-31 A természetes számok halmazán az összeadást definiálhatjuk a Peano axiómákkal ha a számokat az µ rákövetkező függvény segítségével ábrázoljuk: ½ ¼µ ¾ ¼µµ ¼µµµ ººº (Peano ábrázolás). ± ÔÐÙ µ Þ È ÒÓ Ö ÞÓÐ µº ÔÐÙ ¼ µº ± ¼ º ÔÐÙ µ µµ ¹ µ µº ± ÔÐÙ A predikátum több irányban is használható: ÔÐÙ µº ¹ ÔÐÙ ¼µ ¼µµ µº ¼µµµ ÒÓ ± ½ ¾ ¹ ÔÐÙ ¼µ ¼µµµµº ¼µµ ÒÓ ± ¹½ ¾ ¹ ÔÐÙ ¼µµµº ¼ ¼µµ ± ¾ ¼ ¾ ¼µ ¼µ ± ¾ ½ ½ ¼µµ ¼ ± ¾ ¾ ¼ ÒÓ ¹

Adott összegű fák építése LP-32 Adott összegű fát építő eljárás Peano aritmetikával: ØÖ ÙÑ Ð Î ÐÙ µ Î ÐÙ µº ØÖ ÙÑ ÒÓ Ä Ø Ê Øµ ˵ ¹ ÔÐ٠˽ ˾ ˵ ˽ ¼ ˾ ¼ ± Ô Ø ØØ Ð Ö Ð ÒØ ± Ò Ñ Ý Ø Ø ± ¼¹Ø Þ Ö Ù Ñ ÖØ Ð Ò Ò Ó Ñ ÓÐ Ú Òº ØÖ ÙÑ Ä Ø Ë½µ ˾µº ØÖ ÙÑ Ê Ø Az eljárás futása: ¹ ØÖ ÙÑ ÌÖ ¼µµµµº ÌÖ Ð ¼µµµµ ± ÌÖ ÒÓ Ð ¼µµ Ð ¼µµµµ ± ½ ¾µ ÌÖ ÒÓ Ð ¼µµ ÒÓ Ð ¼µµ Ð ¼µµµµ ± ½ ½ ½µµ ÌÖ ÒÓ Ð ¼µµµ Ð ¼µµµ ± ¾ ½µ ÌÖ ÒÓ ÒÓ Ð ¼µµ Ð ¼µµµ Ð ¼µµµ ± ½ ½µ ½µ ÒÓ

A Prolog adatfogalma, a Prolog kifejezés LP-33 konstans (atomic) számkonstans (number) egész vagy lebegőpontos, ½ ¹¾º º¼ ½¼ pl. névkonstans (atom), ³Á ØÚ Ò³ ÞÙÐÓ ÙÑ ØÖ pl. összetett- vagy struktúra-kifejezés (compound) ún. kanonikus alak: struktúranév arg 1,... µ a struktúranév egy névkonstans, az arg i argumentumok tetszőleges Prolog kifejezések példák: Ð ½µ Ô Ö ÓÒ Û ÐÐ Ñ Ñ Ø ¾¼¼ ½ ¾¾µ µ ½µµ szintaktikus édesítőszerek, pl. operátorok: ½ ½µµ változó (var) pl. ËÞÙÐÓ ¾ Ú ÐØ ½¾ a változó alaphelyzetben behelyettesítetlen, értékkel nem bír, az egyesítés (mintaillesztés) művelete során egy tetszőleges Prolog kifejezést vehet fel értékül (akár egy másik változót)

A PROLOG NYELV KÖZELÍTŐ SZINTAXISA

Predikátumok, klózok LP-35 Példa: ± Ø Ð Þ Ð ÐÐ ÔÖ ØÙÑ Ò ÙÒ ØÓÖ ØÖ ÙÑ»¾ ØÖ ÙÑ Ð Î Ðµ Πеº ± ½º Ð Þ Ø ÒÝ ÐÐ Ø ØÖ ÙÑ ÒÓ Ä Ø Ê Øµ ˵ ¹ ± ØÖ ÙÑ Ä Ø Ë½µ ± Ð ØÖ ÙÑ Ê Ø Ë¾µ ± Ð Ø ÖÞ ¾º Ð Þ Þ ÐÝ Szintaxis: Prolog program ::= predikátum... predikátum ::= klóz... {azonos funktorú} klóz ::= tényállítás. szabály. {klóz funktora = fej funktora} tényállítás ::= fej szabály ::= fej :- törzs törzs ::= cél,... cél ::= kifejezés fej ::= kifejezés

Prolog programok formázása LP-36 Programok javasolt formázása: Az egy predikátumhoz tartozó klózok legyenek egymás mellett a programban, közéjük ne tegyünk üres sort. A predikátumokat válasszuk el üres sorokkal. A klózfejet írjuk sor elejére, minden célt lehetőleg külön sorba, néhány szóközzel beljebb kezdve

Prolog kifejezések LP-37 Példa egy klózfej mint kifejezés: ± ØÖ ÙÑ ÒÓ Ä Ø Ê Øµ ˵ ± Þ Ø ØØ º ÙÒ ØÓÖ ØÖ ÙÑ»¾ ± ± ± ØÖÙ Ø Ö Ò Ú Ö ÙÑ ÒØÙÑ Ú ÐØÓÞ Szintaxis: kifejezés ::= változó {Nincs funktora} konstans {Funktora: konstans»¼} összetett kifejezés {Funktora: struktúranév» arg.szám } egyéb kifejezés {Operátoros, lista, zárójeles, ld. később} 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

Lexikai elemek LP-38 Példák: ± Ú ÐØÓÞ Ø ÃÌ Ø ¾ ¾ ± Ò Ú ÓÒ Ø Ò Ø ³ س ³Á ØÚ Ò³ ³ ³ ³ ³ ± Þ Ñ ÓÒ Ø Ò ¼ ¹½¾ ½¼º¼ ¹½¾º½ ± Ò Ñ Ò Ú ÓÒ Ø Ò Á ØÚ Ò ± Ò Ñ Þ Ñ ÓÒ Ø Ò ½ ½º ¾ Szintaxis: változó ::= nagybetű alfanumerikus jel... alfanumerikus jel... névkonstans ::= ³ idézett karakter kar... ³ kisbetű alfanumerikus jel... tapadó jel... ßÐ egész szám ::= {előjeles vagy előjeltelen számjegysorozat} lebegőpontos szám ::= {belsejében tizedespontot tartalmazó számjegysorozat esetleges exponenssel} idézett karakter ::= {tetszőleges nem ³ és nem karakter} escape szekvencia alfanumerikus jel ::= kisbetű nagybetű számjegy tapadó jel ::= ¹» º ²

LISTA, MINT SZINTAKTIKUS ÉDESÍTŐSZER

ÑÐ Ø º ĵµ ¹ Þ Þ ÑÐ Ø Äµº ÒÙÑ Ö µ ¹ Ð Ø Ò Þ ÑÐ Ø µº ÑÐ Ø µ ¹ Þ ÒÙÑ Ö µ ÑÐ Ø µº Þ ¹ Þ ÑÐ Ø ½ ¾ µº ± ½ ¾ º ½ º ¾ µµ ½ ¾ Ý ¹ Þ ÑÐ Ø ½ ¾µ µº ÒÓ A Prolog lista-fogalma LP-40 A Prolog lista Példa Az üres lista a névkonstans. A nem-üres ³º³ ÖÓ µ lista struktúra ahol a lista feje (első eleme), míg a lista farka, azaz a fennmaradó elemekből álló lista. ÖÓ A listák írhatók egyszerűsített alakban ( szintaktikus édesítés ). Megvalósításuk optimalizált, időben és helyben is hatékonyabb, mint a közönséges struktúráké. Þ ÑÐ Ø µº Þ ÑÐ Ø µº

Listák írásmódjai LP-41 Egy N elemű lista lehetséges írásmódjai: alapstruktúra-alak: º Ð Ñ 1 º Ð Ñ 2 ººº º Ð Ñ N µºººµµ ekvivalens Ð Ñ lista-alak: 2 ººº Ð Ñ 1 Ð Ñ N kevésbe kényelmes ekvivalens Ð Ñ alak: 1 Ð Ñ 2 Ð Ñ ººº N ººº A listák fastruktúra alakja és megvalósítása Elem 1 Farok 1.(Elem 1, Farok 1 ) Elem 1 Elem 2 Elem 2 Farok 2... Elem [ ] N Elem N ÆÍÄÄ [ ]

Listák jelölése szintaktikus édesítőszerek LP-42 az alapvető édesítés: ÖÓ º ÖÓ µ N-szeri alkalmazás kevesebb zárójellel: Ð Ñ 1 Ð Ñ 2 ººº Ð Ñ N ÖÓ Ð Ñ 1 Ð Ñ 2 ººº Ð Ñ N ÖÓ ººº Ha a farok : Ð Ñ 1 Ð Ñ 2 ººº Ð Ñ N Ð Ñ 1 Ð Ñ 2 ººº Ð Ñ N ¹ ½ ¾ º ¹ ½ ¾ º ¹ ½ ¾ º ½ ¾ ½ ¾ ½ ¾ ÒÓ ¹ ½ ¾ º ½ ¾ Ä ½ ¾ ± ÒÝ ÐØ Ú ò ¹ ½ ¾ º ¹ Ä º ½ ¾ µº Ä ½ ¾ Ä ½ ¾ ¹ Ä ½ Ä ¾ º» ¹ Ä ½ ¾ º µ º ¹ ¹» º ¹ µº

Tömör és minta-kifejezések, lista-minták, nyílt végű listák LP-43 (Ismétlés:) Tömör (ground) kifejezés: változót nem tartalmazó kifejezés Minta: egy általában nem nem tömör kifejezés, mindazon kifejezéseket képviseli, amelyek belőle változó-behelyettesítéssel előállnak. Lista-minta: listát (is) képviselő minta. Nyílt végű lista: olyan lista-minta, amely bármilyen hosszú listát is képvisel. Zárt végű lista: olyan lista(-minta), amely egyféle hosszú listát képvisel. Zárt végű Milyen listákat képvisel egyelemű kételemű két egyforma elemből álló 3 elemből áll, 2. ½ eleme Nyílt végű Milyen listákat képvisel tetszőleges nem üres (legalább 1 elemű) legalább 2 elemű legalább 2 elemű, elemei: ººº ½

µº Ð Ð Ñ Ó Ð Ñ µº Ñ A logikai változó LP-44 A logikai változó fogalma: kifejezésként, kifejezésben egyaránt előfordulhat, vö. a változókat a (lista) mintákban. két változó azonossá tehető (azaz egyesíthető): pl. két azonos változó egy kifejezésben. a változó teljes jogú állampolgár a (rész)kifejezések világában Erlang-ban is van mintaillesztés, de a minta csak szétszedésre használható, összerakásra nem; a mintabeli változók mindig (tömör) értéket kapnak. (Egyes újabb funkcionális nyelvek, pl. az Oz nyelv, támogatják a logikai változókat.) Példa: Az alábbi célsorozat egy két azonos elemből álló listát épít fel az Ä változóban. Az elemek értéke azonos lesz a célsorozatbeli változóval: ¹ Ð Ð Ñ Ä µ Ñ Ó Ð Ñ Ä µº = Ä ÒÓ Ha az egyesített változók bármelyike értéket kap, a többi is erre az értékre helyettesítődik: ¹ Ð Ð Ñ Ä µ Ñ Ó Ð Ñ Ä µ ÐÑ º ÐÑ Ä ÐÑ ÐÑ ÒÓ = ¹ Ð Ð Ñ Ä µ Ñ Ó Ð Ñ Ä µ Ñ Ó Ð Ñ Ä ÓÖµ ÓÖ Ä ÓÖ ÓÖ ÒÓ =

ÔÔ Ò ¼ ½ ¾ µ ÔÔ Ò ¼ ¾ µ ½ ¾µ ÔÔ Ò ¼ µ ¾ ½ ¾µ ÔÔ Ò ¼ µ ¾ ½ ¾µ ¾ ½ ½µ ¾ ½ ÁÈ ¾ ½ ÁÈ ½ ¾ ÁÈ ÁÈ ½ ¾ Ä ÔÔ Ò ½ ¾ µ ÛÖ Ø µ ÔÔ Ò ¾ µ ÛÖ Ø ½ µ ¾µ ÔÔ Ò µ ÛÖ Ø ½ ¾ µ ¾µ ÔÔ Ò µ ÛÖ Ø ½ ¾ µ ¾µ ÛÖ Ø ½ ¾ µ ½µ ½ ¾ ÁÈ ½ ¾ Ä Listák összefűzése: az ÔÔ Ò» eljárás LP-45 ÔÔ Ò Ä½ ľ Ä µ: Az Ä lista az Ľ és ľ listák elemeinek egymás után fűzésével áll elő (jelöljük: Ä = Ľ ľ) két megoldás: ÔÔ Ò ¼ ľ ĵ ¹ Ä Ä¾º ÔÔ Ò Ä Äµº ÔÔ Ò ¼ Ľ ľ ĵ ¹ ÔÔ Ò Ä½ ľ Ä µ ¹ ÔÔ Ò ¼ Ľ ľ Ä µ Ä Ä º ÔÔ Ò Ä½ ľ Ä µº ÔÔ Ò ¼» ÔÔ Ò Ä½ ºººµ Az komplexitása: futási ideje Ľ arányos hosszával. Miért jobb ÔÔ Ò» az mint az ÔÔ Ò ¼»? jobbrekurzív, ciklussal ekvivalens (nem fogyaszt vermet) ÔÔ Ò» azonnal, ÔÔ Ò ¼ ºººµ 1000 lépésben hiúsul meg ÔÔ Ò ½ ººº ½¼¼¼ ¼ ¾ ººº µ használható szétszedésre is (lásd később), míg ÔÔ Ò ¼» nem. ÔÔ Ò»

Ä Äµº ÔÔ Ò Ä¾ Ä µ ¹ ÔÔ Ò Ä½ ¹ Ù ÑÓ ÙÐ Ð Ö ÖÝ Ù Ö Ü ÑÔÐ µµº ¹ ØÖ ÔÔ Ò ½ ¾ µº ½ ÐÐ ÔÔ Ò ½ ¾ µ ½ ½ ÐÐ Æ Ö ½ ½ ÐÐ È Ö ½ ¾ ÐÐ ÔÔ Ò ¾ ¾ ¼¼µ È Ö ½ ¾ ¼¼ ¾ ÐÐ ÔÔ Ò ¾ µ È Ö ½ ¾ ¾ ÐÐ ÔÔ Ò ¼µ È Ö ½ ¾ ¼ Ü Ø ÔÔ Ò µ È Ö ½ ¾ Ü Ø ÔÔ Ò µ LP-46 Lista építése elölről nyílt végű listákkal Az append eljárás már az első redukciónál felépíti az eredmény fejét! (az eredményparaméter egy lista-minta lesz, a farok még ismeretlen, vö. logikai változó) ÔÔ Ò Ä½ ľ Ä µº ¹ ÔÔ Ò ½ ¾ Ö µ = Ö ½ ÔÔ Ò ¾ µ Haladó nyomkövetési lehetőségek ennek demonstrálására Ð Ö ÖÝ Ù Ö Ü ÑÔÐ µ példák a nyomkövető programozására, új parancsokra új parancs: Æ név fókuszált argumentum elnevezése szabványos parancs: argszám adott argumentumra fókuszálás új parancs: È [ név ] adott nevű (ill összes) kifejezés kiiratása ½ ½ Ü Ø ÔÔ Ò ½ ¾ ½ ¾ µ ¾ ¾ Ü Ø ÔÔ Ò ¾ ¾ µ ½ ¾ ÒÓ

Listák megfordítása LP-47 Naív (négyzetes lépésszámú) megoldás ± ÒÖ Ú Ä Êµ Þ Ê Ð Ø Þ Ä Ñ ÓÖ Ø º ÒÖ Ú µº ÒÖ Ú Ä Êµ ¹ ÒÖ Ú Ä Êĵ ÔÔ Ò ÊÄ Êµº Lineáris lépésszámú megoldás ± Ö Ú Ö Ê Äµ Þ Ê Ð Ø Þ Ä Ñ ÓÖ Ø º Ö Ú Ö Ê Äµ ¹ Ö Ú ÔÔ Ä Êµº ± Ö Ú ÔÔ Ä½ ľ ʵ Ľ Ñ ÓÖ Ø Ø Ä¾ Ð òþú Ô Ù Ê¹Øº Ö Ú ÔÔ Ê Êµº Ö Ú ÔÔ Ä½ ľ ʵ ¹ Ö Ú ÔÔ Ä½ ľ ʵº A Ð Ø könyvtár tartalmazza az ÔÔ Ò» és Ö Ú Ö»¾ eljárások definícióját. A könyvtár betöltése: ¹ Ù ÑÓ ÙÐ Ð Ö ÖÝ Ð Ø µµº

ÔÔ Ò és Ö Ú ÔÔ listák gyűjtési iránya LP-48 Prolog megvalósítás ÔÔ Ò Ä Äµº Ö Ú ÔÔ Ä Äµº Ö Ú ÔÔ Ä½ ľ Ä µ ¹ ÔÔ Ò Ä½ ľ Ä µ ¹ C++ megvalósítás Ö Ú ÔÔ Ä½ ľ Ä µº ÔÔ Ò Ä½ ľ Ä µº ØÖÙØ Ð Ò ß Ð Ò Ò ÜØ Ö Ð Ñ Ð Ò Ö µ Ð Ñ µ ßÐ Ð ØÝÔ Ð Ò Ð Ø Ð Ø ÔÔ Ò Ð Ø Ð Ø½ Ð Ø Ð Ø¾µ Ð Ø Ö Ú ÔÔ Ð Ø Ð Ø½ Ð Ø Ð Ø¾µ ß Ð Ø Ð Ð Ø¾ ß Ð Ø Ð Ø ÐÔ ²Ð Ø ÓÖ Ð Ø Ô Ð Ø½ Ô Ô Ô¹ Ò Üص ÓÖ Ð Ø Ô Ð Ø½ Ô Ô Ô¹ Ò Üص ß Ð Ø Ò ÛÐ Ò Û Ð Ò Ô¹ Рѵ ß Ð Ø Ò ÛÐ Ò Û Ð Ò Ô¹ Рѵ ÐÔ Ò ÛÐ ÐÔ ²Ò Ûй Ò ÜØ Ò Ûй Ò ÜØ Ð Ð Ò ÛÐ Ð Ð ÐÔ Ð Ø¾ Ö ØÙÖÒ Ð Ö ØÙÖÒ Ð Ø Ð Ð

Listák szétbontása az ÔÔ Ò» segítségével LP-49 ÔÔ Ò Ä½ ľ Ä µ ± Þ Ä Ð Ø Þ Ä½ ľ ± Ð Ø Ð Ñ Ò ÝÑ ± ÙØ Ò òþ Ú Ð ÐÐ Ð º ± Ä Äµº ÔÔ Ò Ä¾ Ä µ ¹ ÔÔ Ò Ä½ ľ Ä µº ÔÔ Ò Ä½ ¹ ÔÔ Ò ½ ¾ µº ½ ¾ ¹ ÔÔ Ò ½ ¾ µº ½ ¾ ½ ½ ¾ µº ÔÔ Ò ½ ¹ ½ ¾ ½ ¾ ½ ¾ ¾ ½ ¾ ½ ¾ ¾ ¹ ÔÔ Ò ¾ µº ¾ µº ÔÔ Ò ¹ ¹ ÔÔ Ò µº ½ ¾ ½ ¾ ½ ¾ ½ ¾ ½ ¾ ÒÓ ½ ¾

Variációk ÔÔ Ò re 1. Három lista összefűzése LP-50 Az ÔÔ Ò» keresési tere véges, ha első és harmadik argumentuma közül legalább az egyik zárt végű lista. ÔÔ Ò Ä½ ľ Ä Ä½¾ µ: Ľ ľ Ä = Ľ¾ ÔÔ Ò Ä½ ľ Ä Ä½¾ µ ¹ ÔÔ Ò Ä½ ľ Ľ¾µ ÔÔ Ò Ä½¾ Ä Ä½¾ µº Nem hatékony, pl.: ÔÔ Ò ½ ººº ½¼¼ ½ ¾ ½ ĵ 103 helyett 203 lépés! Szétszedésre nem alkalmas végtelen választási pontot hoz létre Szétszedésre is alkalmas, hatékony változat ± Ľ ľ Ä Ä½¾ ÓÐ Ú Ý Ä½ ľ Ú Ý Ä½¾ ÓØØ Þ ÖØ Ú òµº ÔÔ Ò Ä½ ľ Ä Ä½¾ µ ¹ ľ Ľ¾ µ ÔÔ Ò Ä¾ Ä Ä¾ µº ÔÔ Ò Ä½ Az ÔÔ Ò» első hívás nyílt végű listát állít elő: ¹ ÔÔ Ò ½ ¾ ľ ĵº Ä ½ ¾ ľ Az Ä argumentum behelyettesítettsége (nyílt vagy zárt végű lista-e) nem számít.

Mintakeresés ÔÔ Ò» -mal LP-51 Párban előforduló elemek ± Ô Ö Ò Ä Ø Ð Ñµ Ä Ø Þ ÑÐ Ø Ò Ð Ñ ÓÐÝ Ò ± Ð Ñ Ñ ÐÝ Ø Ý Ù Ý Ò ÐÝ Ò Ð Ñ Ú Øº Ô Ö Ò Ä µ ¹ ÔÔ Ò Äµº ¹ Ô Ö Ò ½ µº ÒÓ Dadogó részek ± Ó Ä µ ÓÐÝ Ò Ò Ñ Ö Ö ÞÐ Ø Ä¹Ò ± Ñ ÐÝ Ø Ý Ú Ð Ñ Ý Þ Ö ÞÐ Ø Ú Øº Ó Ä µ ¹ ÔÔ Ò ÖÓ Äµ ÔÔ Ò Î ÖÓ µ ÔÔ Ò Î µº ¹ Ó ¾ ¾ ½ ¾ ¾ ½ µº ¾ ¾ ¾ ½ ¾ ÒÓ

Keresés listában LP-52 Ñ Ñ Ö Äµ: az Ä lista eleme Ñ Ñ Ö Ð Ñ ÖÓ µ ¹ Ñ Ñ Ö Ð Ñ Ð Ñ µº Ñ Ñ Ö Ð Ñ ÖÓ µ ¹ Ð Ñ A Ñ Ñ Ö»¾ felhasználási lehetőségei Eldöntendő (igen-nem) kérdés: µº Ñ Ñ Ö Ð Ñ ÖÓ µº Ñ Ñ Ö Ð Ñ ÖÓ µ ¹ Ñ Ñ Ö ¾ ½ ¾ µº Ý Lista elemeinek felsorolása: ¹ Ñ Ñ Ö ½ ¾ µº ½ ¾ ÒÓ ¹ Ñ Ñ Ö ½ ¾ ½ µº ½ ¾ ½ ÒÓ Listák közös elemeinek felsorolása mindkét fenti hívásmintát használja: ¹ Ñ Ñ Ö ½ ¾ µ ¾ µº ¾ ÒÓ Ñ Ñ Ö Egy értéket egy (nyílt végű) lista elemévé tesz, végtelen választás! ¹ Ñ Ñ Ö ½ ĵº Ä ½ Ä ½ Ä ½ ººº A Ñ Ñ Ö»¾ keresési tere véges, ha második argumentuma zárt végű lista.

LP-53 Ñ Ñ Ö»¾ általánosítása: Ð Ø» Ð Ø Ð Ñ Ä Ø Å Ö µ: Ð Ñet a Ä Ø ból elhagyva marad Å Ö. Ð Ø Ð Ñ Ð Ñ Å Ö Å Ö µº ± Ð Ý Ù Ø Ñ Ö ÖÓ º Ð Ø Ð Ñ ÖÓ Å Ö ¼ µ ¹ ± Å Ö ÖÓ Å Ö ¼µº ± ÖÓ Ð ÝÙÒ Ð Ð Ñ Øº Ð Ø Ð Ñ Felhasználási lehetőségek: ¹ Ð Ø ½ ¾ ½ ĵº ± ÓØØ Ð Ñ Ð Ý Ä ¾ ÒÓ ¹ Ð Ø ½ ¾ ĵº ± ÖÑ ÐÝ Ð Ñ Ð Ý Ä ¾ ½ Ä ½ ¾ Ä ½ ¾ ÒÓ ¹ Ð Ø Ä ½ ¾ µº ± ÓØØ Ð Ñ Þ Ö Ä ½ ¾ Ä ½ ¾ Ä ½ ¾ ÒÓ ¹ Ð Ø ¾ Ä ½ ¾ ¾ ½ µº ± Þ Ö Ø ¹ Þ ½ ººº ¹ ÒÓ ± Ý Ó Ý ¾ ººº ¹Ø Ô ÙÒ ¹ Ð Ø ½ ¾ ĵº Ä ¾ ½ ½ Ä ½ ¾ ½ ÒÓ A Ð Ø könyvtár tartalmazza a Ñ Ñ Ö»¾ és Ð Ø» eljárások definícióját is. A Ð Ø» keresési tere véges, ha 2. és 3. argumentuma közül legalább az egyik zárt végű.

Listák permutációja LP-54 Ô ÖÑÙØ Ø ÓÒ Ä Ø È Öѵ: Ä Ø permutációja a È ÖÑ lista. (Az alábbi definíció a Ð Ö ÖÝ Ð Ø µ könyvtárból származik:) Ô ÖÑÙØ Ø ÓÒ µº Ô ÖÑÙØ Ø ÓÒ Ä Ø Ð Ó È ÖÑ µ ¹ Ð Ø Ð Ó Ä Ø Å Ö µ È Öѵº Ô ÖÑÙØ Ø ÓÒ Å Ö Felhasználási példák: ¹ Ô ÖÑÙØ Ø ÓÒ ½ ¾ ĵº Ä ½ ¾ Ä ¾ ½ ÒÓ ¹ Ô ÖÑÙØ Ø ÓÒ Äµº Ä Ä Ä Ä Ä Ä ÒÓ ¹ Ô ÖÑÙØ Ø ÓÒ Ä ½ ¾ µº Ä ½ ¾ Ú Ø Ð Ò Ö Ø Ö Ha Ô ÖÑÙØ Ø ÓÒ»¾-ben az első argumentum ismeretlen, akkor a Ð Ø hívás keresési tere végtelen!

OPERÁTOROK, MINT SZINTAKTIKUS ÉDESÍTŐSZER

Operátor-kifejezések LP-56 Példa: Ë ¹Ë½ ˾ Ú Ú Ð Ò Þ Ë ¹ ˽µ ˾µµ Þ Ð ± Operátoros kifejezések összetett kifejezés ::= struktúranév ( argumentum,... ) {eddig csak ez volt} 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 {ha operátorként lett definiálva} Operátor-kezelő beépített predikátumok: ÓÔ ÈÖ ÓÖ Ø Ø ÇÔÆ Úµ vagy ÓÔ ÈÖ ÓÖ Ø Ø ÇÔÆ Ú 1 ÇÔÆ Ú 2 ººº µ: ÈÖ ÓÖ Ø : 0 1200 közötti egész Ø : az Ý Ü, Ü Ý, Ü Ü, Ý, Ü, Ý, Ü névkonstansok egyike ÇÔÆ Ú: tetszőleges névkonstans pozitív prioritás esetén definiálja az operátor(oka)t, 0 prioritás esetén megszünteti azokat. ÙÖÖ ÒØ ÓÔ ÈÖ ÓÖ Ø Ø ÇÔÆ Úµ: felsorolja a definiált operátorokat.

Szabványos, beépített operátorok LP-57 Szabványos operátorok 1200 Ü Ü ¹ ¹¹ 1200 Ü ¹ ¹ 1100 Ü Ý 1050 Ü Ý ¹ 1000 Ü Ý ³ ³ 900 Ý 700 Ü Ü ºº Egyéb beépített operátorok SICStus Prologban 1150 Ü ÝÒ Ñ ÑÙÐØ Ð 900 Ý ÔÝ ÒÓ ÔÝ 550 Ü Ý 500 Ý Ü 500 Ü ÐÓ Ñ Ø ÔÖ Ø 500 Ý Ü ¹»» 400 Ý Ü»»» Ö Ñ 200 Ü Ü 200 Ü Ý 200 Ý ¹ ÑÓ

Operátorok jellemzői LP-58 Egy operátort jellemez a fajtája és prioritása A fajta meghatározza az operátor-osztályt (írásmódot) és az asszociatívitást: Fajta Osztály Értelmezés bal-asszoc. jobb-asszoc. nem-asszoc. Ý Ü Ü Ý Ü Ü infix µ Ý Ü prefix µ Ý Ü posztfix µ Több-operátoros kifejezésben a zárójelezést a prioritás és az asszociatívitás határozza meg, pl.»» µ µ mert» és prioritása 400, ami kisebb mint a prioritása (500) (kisebb prioritás = erősebb kötés). µ mert a operátor fajtája Ý Ü, azaz bal-asszociatív balra köt, balról jobbra zárójelez (a fajtanévben az Ý betű mutatja az asszociatívitás irányát) µ mert a operátor fajtája Ü Ý, azaz jobb-asszociatív (jobbra köt, jobbról balra zárójelez) szintaktikusan hibás, mert az operátor fajtája Ü Ü, azaz nem-asszociatív

Operátorok: zárójelezés LP-59 Induljunk ki egy teljesen zárójelezett, több operátort tartalmazó kifejezésből! Egy részkifejezés prioritása a (legkülső) operátorának a prioritása. Egy op prioritású operátor ap prioritású argumentumát körülvevő zárójelpár elhagyható ha: ap < op pl. µ (ap = 400, op = 500) ap = op, jobb-asszociatív operátor jobboldali argumentuma esetén, pl. µ (ap = 200, op = 200) ap = op, bal-asszociatív operátor baloldali argumentuma esetén, pl. ½ ¾µ ½ ¾. Kivétel: ha a baloldali argumentum operátora jobb-asszociatív, azaz az előző feltétel alkalmazható. Példa a kivétel esetére: ÓÔ ¼¼ Ü Ý µº ¹ ¹ ¹ ÛÖ Ø ½ ¾µ µ Òк ½ ¾µ ¹ ¹ ÛÖ Ø ½ ¾ µµ Òк ½ ¾ tehát: konfliktus esetén az első operátor asszociativitása győz.

Operátorok kiegészítő megjegyzések LP-60 Azonos nevű, azonos osztályba tartozó operátorok egyidejűleg nem megengedettek. Egy program szövegében direktívákkal definiálhatunk operátorokat, pl. ¹ ÓÔ ¼¼ Ü Ü ¹¹µº ¹ ÓÔ ¼ Ü µº ØÖ ÙÑ Î Îµº ºººµ A vessző kettős szerepe struktúra-kifejezés argumentumait választja el 1000 Ü Ý prioritású operátorként működik Ô ¹ µ ¹ Ô ³ ³ ³ ³ µµµ pl.: a pucér vessző ( ) nem névkonstans, de operátorként aposztrofok nélkül is írható. struktúra-argumentumban 999-nél nagyobb prioritású kifejezést zárójelezni kell: ¹ ÛÖ Ø ÒÓÒ Ð µµº ¹ ÛÖ Ø ÒÓÒ Ð µº ³ ³ ³ ³ µµ ÔÖÓ ÙÖ ÛÖ Ø ÒÓÒ Ð» Ó ÒÓØ Ü Ø Az egyértelmű elemezhetőség érdekében a Prolog szabvány kiköti, hogy operandusként előforduló operátort zárójelbe kell tenni, ÓÑÔ µ pl. nem létezhet azonos nevű infix és posztfix operátor. Sok Prolog rendszerben nem kötelező betartani ezeket a megszorításokat.

Operátorok felhasználása LP-61 Mire jók az operátorok? aritmetikai eljárások kényelmes irására, pl. µ ÑÓ aritmetikai kifejezések szimbolikus feldolgozására (pl. szimbolikus deriválás) klózok leírására ( ¹ és ³ ³ is operátor) klózok átadhatók meta-eljárásoknak, pl ÖØ Ô µ ¹Õ µ Ö µµ µ eljárásfejek, eljáráshívások olvashatóbbá tételére: ¹ ÓÔ ¼¼ Ü Ü Ò Ý Þ Ð Þ Ð µº Ò Ý Þ Ð Æ ¹ Ý Þ Ð ËÞ ËÞ Þ Ð Æº Ý adatstruktúrák olvashatóbbá tételére, pl. ¹ ÓÔ ½¼¼ Ü Ü º µº Ú Ò º¾¹ ¹Óº µº Miért rosszak az operátorok? egyetlen globális erőforrás, ez nagyobb projektben gondot okozhat.

Aritmetika Prologban LP-62 Az operátorok teszik lehetővé azt is, hogy a matematikában ill. más programozási nyelvekben megszokott módon írhassunk le aritmetikai kifejezéseket. Az beépített predikátum egy aritmetikai kifejezést vár a jobboldalán (2. argumentumában), azt kiértékeli, és az eredményt egyesíti a baloldali argumentummal Az beépített predikátum mindkét oldalán aritmetikai kifejezést vár, azokat kiértékeli, és csakkor sikerül, ha az értékek megegyeznek. Példák: ½ ¾ ½ ¾µ = ½ ¾ ÒÓ ¹ ½ ¾ ÛÖ Ø µ ÛÖ Ø ³ ³µ ÛÖ Ø ÒÓÒ Ð µ º ¹»¾ ¾º ¹»¾ ¾º ¾º¼ ÒÓ = ÒÓ = Fontos: az aritmetikai operátorokkal (+,-,... ) képzett kifejezések összetett Prolog kifejezést jelentenek. Csak az aritmetikai beépített predikátumok értékelik ki ezeket! A Prolog kifejezések alapvetően szimbolikusak, az aritmetikai kiértékelés a kivétel.

Klasszikus szimbolikus kifejezés-feldolgozás: deriválás LP-63 Írjunk olyan Prolog predikátumot, amely számokból és Ü az névkonstansból ¹ a műveletekkel képzett kifejezések deriválását elvégzi! ± Ö Ú Ã µ à ¹Ò Þ Ü Þ Ö ÒØ Ö Ú ÐØ º Ö Ú Ü ½µº Ö Ú ¼µ ¹ ÒÙÑ Ö µº Ö Ú Í Î Í Îµ ¹ Ö Ú Í Íµ Ö Ú Î Îµº Ö Ú Í¹Î Í¹ ε ¹ Ö Ú Í Íµ Ö Ú Î Îµº Ö Ú Í Î Í Î Í Îµ ¹ Ö Ú Í Íµ Ö Ú Î Îµº ¹ Ö Ú Ü Ü Ü µº ½ Ü Ü ½ ½ ÒÓ = ¹ Ö Ú Ü ½µ Ü ½µ µº ½ ¼µ Ü ½µ Ü ½µ ½ ¼µ ÒÓ = ¹ Ö Ú Á ½ Ü Ü ½ ½µº Á Ü Ü Ü ÒÓ = ¹ Ö Ú Á ¼µº ÒÓ =

Operátoros példa: polinom behelyettesítési értéke LP-64 Formula: számokból és az Ü névkonstansból és operátorokkal felépülő kifejezés. A feladat: Egy formula értékének kiszámolása egy adott Ü érték esetén. ± ÖØ Ã µ à ÓÖÑÙÐ ÖØ Þ Ü ÐÝ ØØ Ø Ðº ÖØ Ü µ ¹ º ÖØ Ã µ ¹ ÒÙÑ Ö Ã µ à º ÖØ Ã½ þ µ ¹ ÖØ Ã½ ½µ ÖØ Ã¾ ¾µ ½ ¾º ÖØ Ã½ þ µ ¹ ÖØ Ã½ ½µ ÖØ Ã¾ ¾µ ½ ¾º ¹ ÖØ Ü ½µ Ü Ü ¾ Ü Ü µ ¾ µº ¾¾ ÒÓ

TÍPUSOK PROLOGBAN

Típusok leírása Prologban LP-66 Típusleírás: (tömör) Prolog kifejezések egy halmazának megadása Alaptípusok leírása: ÒØ ÐÓ Ø ÒÙÑ Ö ØÓÑ ÒÝ Új típusok felépítése: ØÖ Ì 1 ººº Ì ß n Ð jelentése { ØÖ e 1 ººº e µ n e µ 1 1 ººº e Ì n Ì n }, n 0 ß Þ Ñ ÐÝ ØÓÑ ØÓÑ ÒصРPélda: az Þ Ñ ÐÝ» olyan funktorú struktúrák halmaza, amelyben az első két argumentum atom, a harmadik egész. Típusok, mint halmazok úniója képezhető a» operátorral. ß Þ Ñ ÐÝ ØÓÑ ØÓÑ Òصл ß ØÓѹ ØÓÑл ØÓÑ Egy típusleírás elnevezhető (kommentben): ¹ ØÝÔ ØÒ Ú ØÐ Ö º ¹ ØÝÔ Ø½ ß ØÓѹ ØÓÑл ØÓѺ, ¹ ØÝÔ Ñ Ö ß Ñ Ö¹ ØÓÑл ß ÑÑ Ðº Megkülönböztetett únió: csupa különböző funktorú összetett típus úniója. Ha S 1,..., S n mind különböző funktorú, alkalmazható az egyszerűsített (Mercury) jelölés: ¹ ØÝÔ T ß S 1 л ººº» ß S n к ¹ ØÝÔ T ¹¹¹ S 1 ººº S n º Példák: ¹ ØÝÔ Ñ Ö ¹¹¹ Ñ Ö¹ ØÓÑ ÑÑ º ¹ ØÝÔ ¹¹¹ Ð Òص ÒÓ µº

Típusok leírása Prologban folytatás LP-67 Paraméteres típusok példák ¹ ØÝÔ Ô Ö Ì½ ̾µ ¹¹¹ ̽ ¹ ̾º ± Ý ³¹³ Ò Úò Ø Ö º¹ ØÖÙ Ø Ö ± Ð Ö º ̽ Ñ Ó Ì¾ Ø ÔÙ º ¹ ØÝÔ ØÖ Ìµ ¹¹¹ Р̵ ± Ì Ø ÔÙ Ð Ñ Ð ÐÐ ÒÓ ØÖ Ìµ ØÖ Ìµµº ± Ò Ö ¹ ØÝÔ Ó ØÖ Ã ÝÌ Î Ð٠̵ ± à ÝÌ Î ÐÙ Ì Ø ÔÙ ØÖ Ô Ö Ã ÝÌ Î Ð٠̵µº ± Ô ÖÓ Ð ÐÐ ¹ ØÝÔ Þ Ø Ö Ó ØÖ Þ Þ µº ¹ ØÝÔ Þ ØÓѺ Típusdeklarációk szintaxisa ¹ ØÝÔ ¹ ØÝÔ ¹¹¹ µ ß Ð» µ típusdeklaráció ::= típuselnevezés típuskonstrukció típuselnevezés ::= típusazonosító típusleírás. típuskonstrukció ::= típusazonosító megkülönb. únió. megkülönb. únió ::= konstruktor... konstruktor ::= névkonstans struktúranév típusleírás,... típusleírás ::= típusazonosító típusváltozó konstruktor típusleírás típusleírás típusazonosító ::= típusnév típusnév típusváltozó,... típusnév ::= névkonstans típusváltozó ::= változó

Predikátumtípus-deklarációk LP-68 Predikátumtípus-deklaráció ÔÖ eljárásnév típusazonosító,...µ ¹ Példa: ¹ ÔÖ ØÖ ÙÑ ØÖ Òص Òصº Predikátummód-deklaráció (Nem kötelező, több is megadható.) ¹ ÑÓ eljárásnév módazonosító,...µ ahol módazonosító ::= Ò ÓÙØ ÒÓÙØ. (Mercury-ban az ÒÓÙØ módazonosító nem megengedett.) Példák: ¹ ÑÓ ØÖ ÙÑ Ò Òµº ± ÐÐ Ò ÖÞ ¹ ÑÓ ØÖ ÙÑ Ò ÓÙصº ± ¹ Þ Ð ÐÐ Ø ÑÓ ØÖ ÙÑ ÓÙØ Òµº ± ÓØØ Þ ò Ô Ø ¹ Vegyes típus- és móddeklaráció ÔÖ eljárásnév típusazonosító módazonosító,...µ ¹ Példa: ¹ ÔÖ ØÛ Ò ÒØ Ò ÒØ Ò ÒØ ÓÙصº

Móddeklaráció: a SICStus kézikönyv által használt alak LP-69 A SICStus kézikönyv egy másik jelölést használ a bemenő/kimenő argumentumok jelzésére, pl. ØÖ ÙÑ Ì ËÙѵº Mód-jelölő karakterek: bemenő argumentum (behelyettesített) eljárás-paraméter (meta-eljárásokban) tetszőleges ¹ kimenő argumentum (behelyettesítetlen)

AZ EGYESÍTÉSI ALGORITMUS

A Prolog alapvető adatkezelő művelete: az egyesítés LP-71 Egyesítés (unification): két Prolog kifejezés (pl. egy eljáráshívás és egy klózfej) azonos alakra hozása, változók esetleges behelyettesítésével. Példák Bemenő paraméterátadás a fej változóit helyettesíti be: hívás: Ò Ý ÞÙÐÓ ³ÁÑÖ ³ Æ Þµ, fej: Ò Ý ÞÙÐÓ Ý Æµ, behelyettesítés: Ý ³ÁÑÖ ³ Æ Æ Þ Kimenő paraméterátadás a hívás változóit helyettesíti be: hívás: ÞÙÐÓ ³ÁÑÖ ³ ËÞµ, fej: ÞÙÐÓ ³ÁÑÖ ³ ³Á ØÚ Ò³µ, behelyettesítés: ËÞ ³Á ØÚ Ò³ Bemenő/kimenő paraméterátadás a fej és a hívás változóit is behelyettesíti: hívás: ÙÑ ØÖ Ð µ ËÙѵ fej: ÙÑ ØÖ Ð Îµ ε behelyettesítés: Î ËÙÑ

LP-72 Egyesítés: változók behelyettesítése A behelyettesítés fogalma A behelyettesítés egy olyan függvény, amely bizonyos változókhoz kifejezéseket rendel. Példa: σ = {, µ, }. Itt Dom(σ) = {X, Y, Z} A σ behelyettesítés -hez -t, -hoz µ-t -hez -t rendeli. Jelölés: Xσ = a stb. A behelyettesítés-függvény természetes módon kiterjeszthető az összes kifejezésre: Kσ: σ alkalmazása K kifejezésre: σ behelyettesítéseit egyidejűleg elvégezzük K-ban. Példa: µ µσ = µ µµ A σ és θ behelyettesítések kompozíciója (σ θ) egymás utáni alkalmazásuk A σ θ behelyettesítés az x Dom(σ) változókhoz az (xσ)θ kifejezést, a többi y Dom(θ)\Dom(σ) változóhoz yθ-t rendeli (Dom(σ θ) = Dom(σ) Dom(θ)): σ θ = { x (xσ)θ x Dom(σ)} { y yθ y Dom(θ)\Dom(σ) } Pl. θ = {, } esetén σ θ = {, µ,, } Egy G kifejezés általánosabb mint egy S, ha létezik olyan ρ behelyettesítés, hogy S = Gρ Példa: G = µ általánosabb mint S = ½ µµ, mert ρ = { 1, µ} esetén S = Gρ.

Egyesítés: legáltalánosabb egyesítő LP-73 A és B kifejezések egyesíthetőek ha létezik egy olyan σ behelyettesítés, hogy Aσ = Bσ. Ezt az Aσ = Bσ kifejezést A és B egyesített alakjának nevezzük. Két kifejezésnek általában több egyesített alakja lehet. Példa: A = µ és B = ͵ ͵ egyesített alakja pl. K 1 = µ µ a σ 1 = { µ,, Í } behelyettesítéssel K 2 = ͵ ͵ a σ 2 = { ͵, Í} behelyettesítéssel K 3 = µ µ a σ 3 = { µ, Í } behelyettesítéssel A és B legáltalánosabb egyesített alakja egy olyan C kifejezés, amely A és B minden egyesített alakjánál általánosabb A fenti példában K 2 és K 3 legáltalánosabb egyesített alakok Tétel: A legáltalánosabb egyesített alak, változó-átnevezéstől eltekintve egyértelmű. A és B legáltalánosabb egyesítője egy olyan σ = mgu(a, B) behelyettesítés, amelyre Aσ és Bσ a két kifejezés legáltalánosabb egyesített alakja. A fenti példában σ 2 és σ 3 legáltalánosabb egyesítő. Tétel: A legáltalánosabb egyesítő, változó-átnevezéstől eltekintve egyértelmű.

LP-74 Az egyesítési algoritmus Az egyesítési algoritmus bemenete: két Prolog kifejezés: A és B feladata: a két kifejezés egyesíthetőségének eldöntése eredménye: sikeresség esetén a legáltalánosabb egyesítő (mgu(a, B)) előállítása. Az egyesítési algoritmus, σ = mgu(a, B) előállítása 1. Ha A és B azonos változók vagy konstansok, akkor σ = {} (üres behelyettesítés). 2. Egyébként, ha A változó, akkor σ = {A B}. 3. Egyébként, ha B változó, akkor σ = {B A}. 4. Egyébként, ha A és B azonos nevű és argumentumszámú összetett kifejezések és argumentum-listáik A 1,...,A N ill. B 1,...,B N, és a. A 1 és B 1 legáltalánosabb egyesítője σ 1, b. A 2 σ 1 és B 2 σ 1 legáltalánosabb egyesítője σ 2, c. A 3 σ 1 σ 2 és B 3 σ 1 σ 2 legáltalánosabb egyesítője σ 3, d.... akkor σ = σ 1 σ 2 σ 3.... 5. Minden más esetben a A és B nem egyesíthető.

LP-75 Egyesítési példák ÙÑ ØÖ Ð Îµ A ε, ÙÑ ØÖ Ð µ ˵ B (4.) A és B neve és argumentumszáma megegyezik (a.) Ñ Ù Ð Îµ Ð µµ (4., majd 2. szerint) = {Î } = σ 1 (b.) Ñ Ù Îσ 1 ˵ = Ñ Ù Ëµ (3. szerint) = {Ë } = σ 2 tehát mgu(a, B) = σ 1 σ 2 = {Î, Ë } A ÒÓ Ð µ ̵, B ÒÓ Ì Ð µµ (4.) A és B neve és argumentumszáma megegyezik (a.) Ñ Ù Ð µ ̵ (3. szerint) = {Ì Ð µ} = σ 1 (b.) Ñ Ù Ìσ 1 Ð µµ = Ñ Ù Ð µ Ð µµ (4, majd 2. szerint) = { } = σ 2 tehát mgu(a, B) = σ 1 σ 2 = {Ì Ð µ, }

Egyesítési példák a gyakorlatban LP-76 Az egyesítéssel kapcsolatos beépített eljárások: egyesíti a két argumentumát, meghiúsul, ha ez nem lehetséges. sikerül, ha két argumentuma nem egyesíthető, egyébként meghiúsul. Példák: ¹ µ Ä Ø Ê Øº Ä Ø Ê Ø ¹ ÒÓ Ð µ ̵ ÒÓ Ì Ð µµº Ì Ð µ ¹ ½ ¾ º ± Ñ ÖØ ½ ¾ ½ ¾ µ ÒÓ ¹ ½ ¾µ º ½ ¾ ¹» ¹ µ Í ¹ µº» Í ¹ µ Í ¾ ¾µ Í µ µº Í µ ¾ ¾

Az egyesítés kiegészítése: előfordulás-ellenőrzés (occurs check) LP-77 Kérdés: és µ egyesíthető-e? A matematikai válasz: nem, egy változó nem egyesíthető egy olyan struktúrával, amelyben előfordul (ez az előfordulás-ellenőrzés). Az ellenőrzés költséges, ezért alaphelyzetben nem alkalmazzák, így ciklikus kifejezések keletkezhetnek. Szabványos eljárásként rendelkezésre áll: ÙÒ Ý Û Ø ÓÙÖ»¾ Kiterjesztés (pl. SICStus): az előfordulás-ellenőrzés elhagyása miatt keletkező ciklikus kifejezések tisztességes kezelése. Példák: ¹ ½ µº ½ ½ ½ ½ ºººµµµµµ ¹ ÙÒ Ý Û Ø ÓÙÖ ½ µµº ÒÓ ¹ µ µµ º ºººµµµµµ ºººµµµµµ

A PROLOG VÉGREHAJTÁSI MECHANIZMUSA

A Prolog végrehajtás eljárásos modelljei LP-79 Az azonos funktorú klózok alkotnak egy eljárást Egy eljárás meghívása a hívás és klózfej mintaillesztésével (egyesítésével) történik A végrehajtás lépéseinek modellezése: Eljárás-redukciós modell Az alaplépés: egy hívás-sorozat (azaz célsorozat) redukálása egy klóz segítségével (ez a már ismert redukciós lépés). Visszalépés: visszatérünk egy korábbi célsorozathoz, és újabb klózzal próbálkozunk. A modell előnyei: pontosan definiálható, a keresési tér szemléltethető Eljárás-doboz modell Az alapgondolat: egymásba skatulyázott eljárás-dobozok kapuin lépünk be és ki. Egy eljárás-doboz kapui: hívás (belépés), sikeres kilépés, sikertelen kilépés. Visszalépés: új megoldást kérünk egy már lefutott eljárástól (újra kapu). A modell előnyei: közel van a hagyományos rekurzív eljárásmodellhez, a Prolog beépített nyomkövetője is ezen alapul.

A eljárás-redukciós végrehajtási modell LP-80 A redukciós végrehajtási modell alapgondolata A végrehajtás egy állapota: egy célsorozat A végrehajtás kétféle lépésből áll: redukciós lépés: egy célsorozat + klóz új célsorozat zsákutca esetén visszalépés: visszatérés a legutolsó választási ponthoz Választási pont: létrehozása: olyan redukciós lépés amely nem a legutolsó klózzal illesztett aktiválása: visszalépéskor visszatérünk a választási pont célsorozatához és a további klózok között keresünk illeszthetőt (Emiatt a választási pontban a célsorozat mellett az illesztett klóz sorszámát is tárolni kell.) az ún. indexelés segít a választási pontok számának csökkentésében A redukciós modell keresési fával szemléltethető A végrehajtás során a fa csomópontjait járjuk be mélységi kereséssel A fa gyökerétől egy adott pontig terjedő szakaszon kell a választási pontokat megjegyezni ez a választási verem (choice point stack)

A redukciós modell alapeleme: redukciós lépés LP-81 Redukciós lépés: egy célsorozat redukálása egy újabb célsorozattá egy programklóz segítségével (az első cél felhasználói eljárást hív): A klózt lemásoljuk, minden változót szisztematikusan új változóra cserélve. A célsorozatot szétbontjuk az első hívásra és a maradékra. Az első hívást egyesítjük a klózfejjel A szükséges behelyettesítéseket elvégezzük a klóz törzsén és a célsorozat maradékán is Az új célsorozat: a klóztörzs és utána a maradék célsorozat Ha a hívás és a klózfej nem egyesíthető, akkor a redukciós lépés meghiúsul. egy beépített eljárás segítségével (az első cél beépített eljárást hív): A célsorozatot szétbontjuk az első hívásra és a maradékra. A beépített eljáráshívást végrehajtjuk. Ez lehet sikeres (változó-behelyettesítésekkel), vagy lehet sikertelen. Siker esetén a behelyettesítéseket elvégezzük a célsorozat maradékán. Az új célsorozat: az (első hívás elhagyása után fennmaradó) maradék célsorozat. Ha a beépített eljárás hívása sikertelen, akkor a redukciós lépés meghiúsul.

A Prolog végrehajtási algoritmusa LP-82 1. (Kezdeti beállítások:) A verem üres, Ë Ð ÓÖÓÞ Ø 2. (Beépített eljárások:) Ha Ë első hívása beépített akkor hajtsuk végre, a. Ha sikertelen 6. lépés. b. Ha sikeres, Ë a redukciós lépés eredménye 5. lépés. 3. (Klózszámláló kezdőértékezése:) Á ½. 4. (Redukciós lépés:) Tekintsük Ë első hívására vonatkoztatható klózok listáját. Ez indexelés nélkül a predikátum összes klóza lesz, indexelés esetén ennek egy megszűrt részsorozata. Tegyük fel, hogy ez a lista Æ elemű. a. Ha Á Æ 6. lépés. b. Redukciós lépés a lista Á-edik klóza és a Ë célsorozat között. c. Ha sikertelen, akkor Á Á ½ 4. lépés. d. Ha Á Æ (nem utolsó), akkor vermeljük Ë Á -t. e. Ë a redukciós lépés eredménye 5. (Siker:) Ha Ë üres, akkor sikeres vég, egyébként 2. lépés. 6. (Sikertelenség:) Ha a verem üres, akkor sikertelen vég. 7. (Visszalépés:) Ha a verem nem üres, akkor leemeljük a veremből Ë Á -t, Á Á ½, és 4. lépés.

Indexelés (előzetes) LP-83 Mi az indexelés? egy hívásra vonatkoztatható (potenciálisan illeszthető) klózok gyors kiválasztása, egy eljárás klózainak fordítási idejű csoportosításával. A legtöbb Prolog rendszer, így a SICStus Prolog is, az első fej-argumentum alapján indexel (first argument indexing). Az indexelés alapja az első fejargumentum külső funktora: szám vagy névkonstans esetén»¼; Ê nevű és Æ argumentumú struktúra esetén Ê»Æ; változó esetén nem értelmezett (minden funktorhoz besoroltatik). Az indexelés megvalósítása: Fordítási időben minden funktorhoz elkészítjük az alkalmazható klózok listáját Futáskor lényegében konstans idő alatt elő tudjuk vennie a megfelelő klózlistát Fontos: ha egyelemű a részhalmaz, nem hozunk létre választási pontot! Például ÞÙÐÓ ³Á ØÚ Ò³ µ kételemű klózlistára szűkít, de ÞÙÐÓ ³Á ØÚ Ò³µ mind a 6 klózt megtartja (mert a SICStus Prolog csak az első argumentum szerint indexel)

¹ Õ Öº ¼ Ô Ô ¹ غ ½ Õ Ö Õ ¾ Ø Ö º Ø Ö Øº Ö Õ¹ Ð Ú Ð Ð Ô Öº Redukciós modell előnyök és hátrányok LP-84 Előnyök (viszonylag) egyszerű és (viszonylag) precíz definíció a keresési tér megjeleníthető, grafikusan szemléltethető Hátrányok az eljárásokból való kilépést elfedi, pl. nem jól illeszkedik a Prolog megvalósítások tényleges végrehajtási mechanizmusához nem alkalmazható igazi Prolog programok nyomkövetésére (hosszú célsorozatok) Ezért van létjogosultsága egy másik modellnek: eljárás-doboz (procedure box) modell (szokás még 4-kapus doboz ill. Byrd doboz modellnek is nevezni) a Prolog rendszerek nyomkövető szolgáltatása erre a modellre épül

Az eljárás-doboz modell LP-85 A Prolog eljárás-végrehajtás két fázisa előre menő végrehajtás: egymásba skatulyázott eljárás-belépések és - kilépések visszafelé menő végrehajtás: újabb megoldás kérése egy már lefutott eljárástól Egy egyszerű példa Õ µº Õ µº Ô µ ¹ Õ µ º Õ ¾µº Belépünk Ô»½ a eljárásba (Hívási kapu, Call port) Belépünk Õ»½ a eljárásba (Call) Õ»½ A eljárás sikeresen lefut Õ ¾µ a eredménnyel (Kilépési kapu, Exit port)»¾ A eljárásba belépünk ¾ a hívással (Call)»¾ A eljárás sikertelenül fut le (Meghiúsulási kapu, Fail port) (visszafelé menő futás): visszatérünk (a már lefutott) Õ»½-be, újabb megoldást kérve (Újra kapu, Redo Port) Õ»½ A eljárás sikeresen lefut Õ µ a eredménnyel (Exit) A eljáráshívással a»¾-be belépünk majd sikeresen kilépünk (Call, Exit) Ô»½ A eljárás sikeresen Ô µ lefut eredménnyel (Exit)

Eljárás-doboz modell grafikus szemléltetés LP-86 Õ ¾µº Õ µº Õ µº Ô µ ¹ Õ µ º p(x) q(x) X > 3 Call Fail X=2 X=4 X=7 Exit Redo

¹ ØÖ Ô µº ½ ÐÐ Ô µ ½ ¾ ¾ Ü Ø Õ ¾µ ± Ò Ñ Ø ÖÑ Ò ÞØ Ù Ð Ô ¾ ÐÐ ¾ ¾ Ð ¾ ¾ Ê Ó Õ ¾µ ± Ú Þ Ð Ñ Ò Ú Ö Ø ¾ ¾ ¾ Ü Ø Õ µ ½ ½ Ü Ø Ô µ ÒÓ ½ Ê Ó Ô µ ± Ú Þ Ð Ñ Ò Ú Ö Ø ½ ¾ Ê Ó Õ µ ± Ú Þ Ð Ñ Ò Ú Ö Ø ¾ LP-87 Eljárás-doboz modell egyszerű nyomkövetési példa Az előző példa nyomkövetése SICStus Prologban Õ ¾µº Õ µº Õ µº Ô µ ¹ Õ µ º ¾ ¾ ÐÐ Õ µ ¾ ÐÐ ¾ Ü Ø ¾ ¾ Ü Ø Õ µ ¾ ÐÐ ¾ Ü Ø ½ ½ Ü Ø Ô µ

Eljárás-doboz: egy összetettebb példa LP-88 Ô µ ¹ Õ µ Ô µº Ô µ ¹ Õ µº Õ ½ ¾µº Õ ¾ µº Õ ¾ µº p(x,y) Call q(x,z) p(z,y) Exit Fail q(x,y) Redo

LP-89 Eljárás-doboz modell kapcsolási alapelvek Hogyan építhető fel egy szülő eljárás doboza a benne hívott eljárások dobozaiból? Feltehető, hogy a klózfejekben (különböző) változók vannak, a fej-egyesítéseket hívás(okk)á alakítva Előre menő végrehajtás: A szülő Hívás kapuját az első klóz első hívásának Hívás kapujára kötjük. Egy rész-eljárás Kilépési kapuját a következő hívás Hívás kapujára, vagy, ha nincs következő hívás, akkor a szülő Kilépési kapujára kötjük Visszafelé menő végrehajtás: Egy rész-eljárás Meghiúsulási kapuját az előző hívás Újra kapujára, vagy, ha nincs előző hívás, akkor a következő klóz első hívásának Hívás kapujára, vagy ha nincs következő klóz, akkor a szülő Meghiúsulási kapujára kötjük A szülő Újra kapuját mindegyik klóz utolsó hívásának Újra kapujára kötjük mindig arra a klózra térünk vissza, amelyben legutoljára volt a vezérlés

Eljárás-doboz modell OO szemléletben LP-90 Minden eljáráshoz tartozik egy osztály, amelynek van egy konstruktor függvénye (amely megkapja a hívási paramétereket) és egy adj egy (következő) megoldást metódusa. Az osztály nyilvántartja, hogy hányadik klózban jár a vezérlés A metódus első meghívásakor az első klóz első Hívás kapujára adja a vezérlést Amikor egy részeljárás Hívás kapuhoz érkezünk, létrehozunk egy példányt a meghívandó eljárásból, majd meghívjuk az eljáráspéldány következő megoldás metódusát (*) Ha ez sikerül, akkor a vezérlés átkerül a következő hívás Hívás kapujára, vagy a szülő Kilépési kapujára Ha ez meghiúsul, akkor megszüntetjük az eljáráspéldányt majd ugrunk az előző hívás Újra kapujára, vagy a következő klóz elejére, stb. Amikor egy Újra kapuhoz érkezünk, a (*) lépésnél folytatjuk. A szülő Újra kapuja (a következő megoldás nem első hívása) a tárolt klózsorszámnak megfelelő klózban az utolsó Újra kapura adja a vezérlést.

Ô Ò ÜØ µ ÓÓÐ Ò Û Ø ÐÒÓµ ß ß ÒØÖÝ ÔÓ ÒØ ÓÖ Ø ÐÐ ÔÓÖØ»» ½»» ÒØ Ö Ð Ù ½ Ô µ ¹ Õ µ Ô µº ÐÒÓ Ö Ó½½ ß Õ ÔØÖ¹ Ò ÜØ µµ Ð Ò Û Ô Þ Ôݵ ÔÔØÖ Ö Ó½¾»» ß ÔÔØÖ¹ Ò ÜØ µµ Ð ÌÊÍ Ö ØÙÖÒ Ð¾ ¾»» ÒØ Ö Ð Ù ¾ Ô µ ¹ Õ µº ÐÒÓ Ö Ó¾½»» ß Õ ÔØÖ¹ Ò ÜØ µµ Ð ÌÊÍ Ö ØÙÖÒ OO szemléletű dobozok: Ô»¾ következő megoldás metódusának C++ kódja LP-91 ¼ Õ ÔØÖ Ò Û Õ Ü ²Þµ»» Ö Ø Ò Û Ò Ø Ò Ó Ù Ó Ð Õ µ»» Õ µ Ð Ð Ø Õ ÔØÖ»» ØÖÓÝ Ø ÓØÓ Ð¾»» Ò ÓÒØ ÒÙ Û Ø Ð Ù ¾ Ó Ô»¾»» ÓØ ÖÛ Ö Ø Ò Û Ò Ø Ò Ó Ù Ó Ð Ô µ ½»» ÒØ Ö Ö ÓÖ Ê Ó ÔÓÖØ ÐÒÓ ½µ»» Ô µ Ð Ð Ø ÔÔØÖ»» ØÖÓÝ Ø ÓØÓ Ö Ó½½»» Ò ÓÒØ ÒÙ Ø Ö Ó ÔÓÖØ Ó Õ µ»» ÓØ ÖÛ Ü Ø Ú Ø Ü Ø ÔÓÖØ Õ ÔØÖ Ò Û Õ Ü Ôݵ»» Ö Ø Ò Û Ò Ø Ò Ó Ù Ó Ð Õ µ ¾»» ÒØ Ö Ö ÓÖ Ê Ó ÔÓÖØ ÐÒÓ ½µ»» Õ µ Ð Ð Ø Õ ÔØÖ»» ØÖÓÝ Ø Ö ØÙÖÒ ÄË»» Ò Ü Ø Ú Ø Ð ÔÓÖØ»» ÓØ ÖÛ Ü Ø Ú Ø Ü Ø ÔÓÖØ Ð Ð

Visszalépéses keresés egy aritmetikai példa LP-92 Példa: jó számok keresése A feladat: keressük meg azokat a kétjegyű számokat amelyek négyzete háromjegyű és a szám fordítottjával kezdődik A program: ± ½ µ Â Ý ÔÓÞ Ø Ú Ñ Ð Þ Ñ Ýº ½ ½µº ½ ¾µº ½ µº ½ µº ½ µº ½ µº ½ µº ½ µº ½ µº ± µ Â Ý Ñ Ð Þ Ñ Ýº ¼µº µ ¹ ½ µº ± ËÞ Ñ Ò ÝÞ Ø ÖÓÑ Ýò ËÞ Ñ ÓÖ ØÓØØ Ú Ð Þ º Ó Þ Ñ ËÞ Ñµ ¹ ½ µ µ ËÞ Ñ ½¼ ËÞ Ñ ËÞ Ñ»» ½¼ ½¼ º

Prolog végrehajtás a 4-kapus doboz modell LP-93 Ó Þ Ñ ËÞ Ñµ ¹ ½ µ µ ËÞ Ñ ½¼ ËÞ Ñ ËÞ Ñ»» ½¼ ½¼ º Ó Þ Ñ Call Fail ½ µ... ½ ¾ º.... µ... ¼ ½.... ËÞ Ñ ½¼ ËÞ Ñ ËÞ Ñ»»½¼ ½¼ hamis igaz. Exit Redo

Visszalépéses keresés számintervallum felsorolása LP-94 µ felsorolta a 0 és 9 közötti egész számokat Általánosítás: soroljuk fel az Æ és Å közötti egészeket (Æ és Å maguk is egészek) ± ØÛ Ò Å Æ Áµ Å Á Æ Á Þº ØÛ Ò Å Æ Åµ ¹ Šƺ ØÛ Ò Å Æ Áµ ¹ Å Æ Å½ Å ½ ØÛ Ò Å½ Æ Áµº ± µ Ý Ñ Ð Þ Ñ Ý µ ¹ ØÛ Ò ¼ µº ¹ ØÛ Ò ½ ¾ µ ØÛ Ò µ ½¼ º ½ ½ ¾ ¾ ÒÓ

LP-95 A SICStus eljárás-doboz alapú nyomkövetése legfontosabb parancsok Alapvető nyomkövetési parancsok Ê Ì (help) parancsok listázása Ê Ì (creep) vagy Ê Ì továbblépés minden kapunál megálló nyomkövetéssel Ð Ê Ì (leap) csak töréspontnál áll meg, de a dobozokat építi Þ Ê Ì (zip) csak töréspontnál áll meg, dobozokat nem épít Ê Ì ill. ¹ Ê Ì töréspont rakása/eltávolítása a kurrens predikátumra Ê Ì (skip) eljárástörzs átlépése (Call/Redo Exit/Fail) Ó Ê Ì (out) kilépés az eljárástörzsből A Prolog végrehajtást megváltoztató parancsok Ù Ê Ì (unify) a kurrens hívást végrehajtás helyett egyesíti egy beolvasott kifejezéssel. Ö Ê Ì (retry) újrakezdi a kurrens hívás végrehajtását (ugrás a Call kapura) Információ-megjelenítő és egyéb parancsok Û Ê Ì (write) a hívás kiírása mélység-korlátozás nélkül Ê Ì (break) új, beágyazott Prolog interakciós szint létrehozása Ò Ê Ì (notrace) nyomkövető kikapcsolása Ê Ì (abort) a kurrens futás abbahagyása