635
Алгоритмы искусственного интеллекта на языке PROLOG Третье издание ИВАН БРАТКО Факультет компьютерных наук и информатики Люблянского университета и Институт Йожефа Штефана Москва • Санкт-Петербург • Киев 2004

Алгоритмы искусственного интеллекта на языке PROLOG

Embed Size (px)

DESCRIPTION

3е издание2004гИван Братко

Citation preview

PROLOG

- 2004

32.973.26-018.2.75 87 681.3.07 "" . .. . "" : [email protected], http://www.winiaraspublishing.com

, . 87 PROLOG, 3- . : . . . : "", 200-1. 640 . : . . . . ISBN 5-8459-0664-4 (.) Prolog, Prolog , , , , , , , . , Prolog . . . 32.973.26-018.2.75

. , , , Addison-Wesley UK. Authorized translation from the English language edition published by Addison-Wesley Publishers Limited, Copyright 2001 by Pearson Education Limited All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Russian language edition published by Williams Publishing House according to the Agreement with R&I Enterprises International, Copyright 2004

ISBN 5-8459-0664-4 (.) ISBN 0-201-40375-7 (.)

"", 2004 Pearson Education Limited, 2001

I. Prolog 1. Prolog 2. Prolog 3. , , 4. : 5. 6. 7. 8, 9. 10. II. Prolog 11. 12. 13. AND/OR 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. . Prolog . 18 25 26 45 76 98 121 136 149 169 192 215 227 228 247 277 301 326 357 383 408 446 478 510 532 559 590 592 595 611 619

I. Prolog 1. Prolog 1.1. 1.2. 1.3. 1.4. Prolog 1.5. 2. Prolog 2.1. 2.1.1. 2.1.2. 2.1.3. 2.2. 2.3. Prolog 2.4. 2.5. : 2.6. 2.6.1. 2.6.2. 2.6.3. 2.7. Prolog 3, , , 3.1. 3.2. 3.2.1. 3.2.2. 3.2.3. 3.2.4. 3.2.5. 3.2.6. 3.3. 3.4. 4. : 4.1. 4.2. 4.3. 4.4. 4.5. 4.5.1. 1 18 25 26 26 30 35 39 42 43 44 45 45 46 47 48 52 56 58 62 66 66 68 72 73 74 76 76 78 79 79 82 82 83 84 87 92 96 98 98 102 103 107 111 111

4.5.2. 2 4.5.3. 3 4.5.4. 5. 5.1. 5.1.1. 1 5.1.2. 2 5.2. 5.2.1. 5.2.2. , 5.2.3. 5.2.4. 5.3. 5.4. , 6. 6.1. 6.2. , 6.2.1. read write 6.2.2. 6.2.3. , 6.3. 6.4. 6.5. , Prolog 7. 7.1. 7.1.1. var, nonvar, atom, integer, float, number, atomic, compound 7.1.2. nonvar 7.2. ; =.., functor, arg name 7.3. 7.4. 7.5. 7.6. bagof, setof fmdall 8. 8.1. 8.2. Prolog 8.2.1. 8.2.2. 8.2.3. 8.3. 8.3.1. 8.3.2. 8.3.3. 8.4. 8.5. 8.5.1.

114 116 119 120 121 121 122 123 125 125 126 126 127 129 132 135 135 136 136 139 139 141 142 143 144 146 147 148 149 149 149 151 156 159 161 164 165 167 169 169 171 171 172 173 173 174 175 175 176 177 178 7

8.5.2. 8.5.3. 5.5.4. 8.5.5. arg 8.5.6. 9. 9.1. 9.2. 9.3. 9.4. 9.5. 9.5.1. 9.5.2. 9.5.3. 10. 10.1. - 10.2. AVL- II. Prolog 11. 11.1. 11.2. 11.3. 11.4. 12. 12.1. 12.2. " " 12.3. 12.4. 12.4.1. * 12.4.2. IDA* 12.4.3. RBFS 13. AND/OR 13.1. AND/OR 13.2. AND/OR 13.2.1. AND/OR 13.2.2. 13.2.3. AND/OR 13.3. AND/OR 8

179 181 182 184 186 190 191 192 192 197 201 206 208 208 209 211 214 214 215 215 218 218 218 221 225 225 227 228 228 232 238 242 245 246 247 247 256 261 265 265 266 269 275 275 277 277 281 281 282 283 284

13.4. AND/OR 13.4.1. 13.4.2. 13.4.3. 14. 14.1. 14.1.1. 14.1.2. 14.1.3. Prolog 14.2. CLP CLP{R) 14.3. CLP 14.4. 14.5. CLP CLP(FD) 15. 15.1. 15.2. 15.3. , 15.3.1. 15.3.2. 15.3.3. 15.4. 15.5. 15.5.1. 15.5.2. , 15.6. 15.6.1. , 15.6.2. 15.6.3. 15.7. 15.7.1. 15.7.2. 16. 16.1. 16.2. 16.2.1. 16.2.2. 16.2.3. , 16.2.4. , 16.3. 16.3.1. explore 16.3.2. useranswer 16.3.3. useranswer 16.3.4. present

289 289 292 298 300 300 301 301 301 303 305 306 310 317 321 324 325 326 326 328 331 331 333 334 336 337 337 339 340 340 344 345 348 349 350 355 356 357 357 361 361 363 364 365 366 366 369 371 376 9

16.3.5. 16.3.6. 16.3.7. 16.4. 17. 17.1. 17.2. 17.3. 17.4. 17.5. 17.6. 17.7. 17.7.1. 17.7.2. 18. 18.1. 18.2. 18.2.1. , 18.2.2. 18.2.3. 18.2.4. 18.3. 18.4. 18.4.1. 18.4.2. 18.5. 18.5.1. 18.5.2. "" 18.5.3. 18.6. 18.7. 18.7.1. 18.7.2. , 18.7.3. 19. 19.1. 19.2. Prolog 19.2.1. 19.2.2. 19.2.3. MINIHYPER 19.2.4. , - 19.3. HYPER 19.3.1. 19.3.2. 19.3.3. HYPER 10

377 378 378 380 382 382 383 383 387 390 393 395 398 401 402 404 406 407 408 408 409 409 410 412 413 414 419 419 422 426 426 428 430 433 439 440 440 441 442 443 446 446 449 449 450 452 458 459 460 463 463

19.3.4. HYPER odd(L) even(L) path( StartNode, GoalNode, Path) , , 20. 20.1. , 20.1.1. 20.1.2. 20.1.3. 20.2. 20.3. 20.4. 20.4.1. 20.4.2. 20.4.3. 20.5. 21. 21.1. Prolog 21.2. 21.2.1. 21.2.2. 21.2.3. DCG 21.3. 21.3.1. 21.3.2. "" "every" 21.3.3. 22. 22.1. , 22.2. 22.3. --:

470 470 471 472 474 476 477 478 478 478 479 480 180 480 480 481 482 486 486 486 486 493 496 497 498 502 507 508 510 510 516 516 518 520 521 521 525 527 531 531 532 532 534 537

11

22.4. , : 22.5. 22.5.1. 22.5.2. 22.5.3. 22.6. Advice Language 0 22.6.1. ALO 22.6.2. " " 23. Me 23.1. 23.2. Prolog 23.2.1. Prolog 23.2.2. 23.2.3. 23.3. 23.4. - 23.5. , 23.5.1. , 23.5.2. Prolog, , 23.5.3. , 1 2 23.5.4. , 23.5.5. 23.6. , , . Prolog assert retract not " \ + " name( Atom, CodeList) consult reconsult . 1 2 3 4 5 6 7 8 12

541 543 543 544 544 546 546 549 556 557 559 559 560 560 562 563 564 565 565 570 576 576 578 579 579 579 580 582 583 583 588 589 590 590 590 590 591 591 591 591 592 595 595 595 596 599 600 601 601 602

9 10 .1.1 1:' 13 14 15 17 18 19 20 21 23

603 604 605 606 606 606 606 607 607 608 608 610 610 611 619

13

, , , , , , "".

, , , Prolog. Shrdlu (Terry Winograd). , , " " (, ) , , . Microplanner, , , Prolog . Microplanner, , Prolog . , "", " ", " ", "" "", , . . Lisp Lisp, , . Lisp . , , . Prolog, . , , , , , , . , Fortran . ( ) , , , 80- . Fortran , . , Lisp , Lisp (, Common Lisp) :: , "HTI , . Prolog, , , , .

15

, Prolog , , , . , . , , . Prolog "" (grandfather), , ( f a t h e r ) (parent). g r a n d f a t h e r : grandfather! X, Z) :- father) Kr Y) , parent' Y, Z), Prolog g r a n d f a t h e r , , . , Prolog, . ?- grandfather! X, patrick) . X = james; X = carl Prolog , , f a t h e r p a r e n t . , . , , . , Prolog, , . , , , , , . , , . , , , . , , , , . , , , . , Prolog, -, . , Prolog, , : , , , . . , , . , , . , , , , .

Prolog , , . , , , . , Prolog , , : ; ; ; ; , Prolog, . , , . , , , , , . , , , Prolog.

17

PrologProlog , , , . . Prolog , ( , ) . , Prolog , , , . : X , Y, a Y , Z, X , Z. Prolog . Prolog . , , . Prolog , .

PrologProlog , 1970- , "programming in logic" ( ). , , (Robert Kowalsld) ( ), (Maarten van Eniden) ( ) (Alain Colmerauer) (). Prolog 1970- . . (David D.H. Warren) . (Constraint Logic Programming CLP), Prolog. CLP - . 1996 ISO Prolog,

Prolog Prolog . . Prolog . ,

. , Microplanner, , . Prolog " " , , "" , . Prolog. , , . , Prolog . " " Prolog, , , , .

Prolog Prolog , . , , , , , Prolog . , Prolog . , a Prolog , , , . , , Prolog . , , , Prolog, - .

I Prolog Prolog. , , , . II Prolog , , , , , , , . , Prolog . . , , , Prolog , - , 19

, , Prolog Prolog. ; " ", , .

. , : (Constraint Logic Programming CLP); ; . : ( ) ; (IDA*, RBFS), , ; , ; , . Prolog , , Prolog (. ).

, Prolog . Prolog , Prolog. , , . ; , (, Pascal) , Prolog.

, Prolog , DKC-W; ISO Prolog. . Prolog . , Prolog1.

20

I. 2.4 Prolog , . 4 , ( ) . 10, , . II , . , , , , , ( 11). . 1 .

. I.

Web- (www. books i t e s . n e t / b r a t k o ) .

21

Prolog (Donald Michie). (Lawrence Byrd), (Fernando Pereira) . . (David H. D. Warren), Prolog , . (Andrew McGettrick) . (Patrick H. Winston). , , (Damjan Bojad?iev), (Rod Bristow), (Peter Clark), (Frans Coencn), . (David , Dodeon), (SaSo Dieroski), (Bogdan Filipic), (Wan Fokkink), (Matja* Gams), . (Peter G. Greenfield), (Marko Grobelnik), (Chris Hinde), (Igor Kononenko), (MatevJ KovaCic), (Eduardo Morales), (Igor Mo2etiC), . (Timothy . Niblett), (DuSan Peterc), (UroS Pompe), (Robert RodoSek), (Agata Saje), (Claude Sammut), (Cem Say), (Ashwin Srinivasan), (Dorian Sue), (Peter Tancig1), (Tanja Urbancic), (Mark Wallace), (William Wai ley), (Simon Weilguny), (Blaz Zupan) (Darko ZupaniC), , , . , . (G. Oulsnam) (Iztok Tvrdy), . (Karen Mosman), (Julie Knight) (Karen Sutherland), Pearson Education, . (Simon Plunitree) (Debra Myson-Etherington) . (Darko SimerSek). , , , . Pearson Education Plenum Publishing Corporation , 10 Human and Machine Problem Solving (1989). . GUhooly (ed.). 2000

22

, , , .

Prolog Prolog , . , , , , (Personal Edition), . Visual Prolog ( h t t p : //www. v i s u a l prolog.ccm http://www.pdc.dk). . Prolog http;//dmoz.org/Computers/Programming/Languages/Prolog/Implementations/ SWI-Prolog, , .

Prolog , , Prolog. " ? - " , , . , , , . , . , ( ), . " ", (consulting). a s s e r t ( a s s e r t a a s s e r t z ) , . , c o n s u l t . . . "" u s e r , .

23

[user] . man(dima). man(kolya). man(petr). end_of_file. -jsec://3 compiled 2S.12 sec, 0 bytes end_of_f i l e . , ( , , ).

?!: I: I: I: %

Prolog , Prolog "" . "" (-, , ..) . Prolog . , Prolog , Java, Delphi, C++ . , , , . Web. ( "Prolog" .)

24

I

Prolog

,., 1. Prolog 2. Prolog 3. , , 4. : 5. . 7. 8. 9. 10, 26 45 76 98 121 136 149 169 192 215

1

Prolog ... 1.1. 1.2. 1.3. 1.4. 1.5. Prolog 26 30 35 39 42

Prolog . , , , , Prolog. , Prolog .

1.1. Prolog , . , . . 1.1 : . , , Prolog : parent( torn, bob). p a r e n t ; torn bob . , , , tom, . , . 1.1, Prolog: parent ( pain, bob) . parent! tom, bob). parent( torn, l i z ) . parent[ bob, ann). parent( bob, p a t ) . parent( pat, jira). , p a r e n t . , p a r e n t ( tom, bob) p a r e n t . . .

. 1.1.

Prolog p a r e n t , , ? Prolog, :?- parent! bob, pat).

, , , Prolog : yes :7- parent( l i z , pat) .

Prolog : no , . "" ?- patent! torn, ben). . , . , ? 7- parent( X, l i z ) . Prolog "yes" "", X, . : X = t , , Prolog : ?- parent( bob, X). . Prolog : 1. Prolog 27

X arm

{ ), Prolog :X - pat

, Prolog "", . , ? : X if, , X Y. Prolog : ?- parent ( , Y) . Prolog . , Prolog ( ) . :X Y X Y X Y - bob; torn = bob; = torn = liz;

, . , , , , , ( ). g r a n d p a r e n t , (. 1.2). 1. ? , Y. 2. Y7 , X.

. 1.2. grandpa t, parent

Prolog :?- p a r e n t ! Y, jim), p a r e n t ! X, Y) .

: - bob Y = pat 28 I. Prolog

: X Y, : parent ( Y, jim) parer.t ( X, ) , : parent! Y parent( Y, jim) f , Prolog, :?- parent! X, Y ) , parent( Y, jim).

. , , :?parent! tomr X), parent; X, Y).

Prolog : = bobY - arm; X - bob = pat

, , . . 1. (X)? 2. ( ) X ? Prolog :?parent! X, aim) , parent! , pat).

;X = bob

. Prolog , p a r e n t , - , . Prolog , . Prolog . . ( ) , ( torn ), ( X Y). , , . , . , parent( X, ann), patent! X, pat) : X X . "" (goal) , Prolog , . , , . 1. Prolog 29

, . . , Prolog , ( ).

1.1. , p a r e n t , (. . 1.1), , Prolog ? ) ?- p a r e n t { jim, X). ) ?- p a r e n t ( X, j i m ) . ) ?- p a r e n t ! pam, X), p a r e n t ( X, p a t ) . r) ?- p a r e n t ! pam, X), p a r e n t ( X, Y), p a r e n t t Y, j i m ) . 1.2. Prolog parent. ) ? ) ? ) ?

1.2. . , p a r e n t . , :female( pam). male[ torn]. male( b o b ] . female { ) . female( p a t ) . female( ann} . male( j i m ) .

male female. ( ). p a r e n t . , , . : . , , . : { pam, feminine). sex{ torn, masculine). sex [ bob, masculine). o f f s p r i n g (), p a r e n t . o f f s p r i n g , p a r e n t , o f f s p r i n g , , , :offspringf l i e , torn).

30

I, Prolog

o f f s p r i n g , , p a r e n t p a r e n t . : X v. Y, Y , > Y. ; Prolog. Prolog, , : offspring! Y, X) :- pacent( X, Yi . : X Y, X Y, Y .

Prolog, offspring! Y, X) :- parent( X, YJ. . . , patent ( torn, ) . , . , , , . , : ( ); ( ). , , , , , , , offspring; Y, X) :- patent( x, Y}. parer.t [ X, Y] , of f s p r i n g ( , X). Prolog . , : ?- offspring* l i z , torn). , o f f s p r i n g . , X Y; , l i z torn. l i z torn, Y l i z , X torn. ( X Y), : X < torn Y = li.z , : offspring( l i z , torn) :- parent! ton, l i z ) . parent( torn, liz) Prolog , . : offspring( l i z , tomi 1, Prolog 31

: parent[ torn, l i z ] , () , . , , Prolog yes. . mother : X X X X Y, Y, Y - .

Prolog :mother! X, Y) :- parent; X, Y ) , female(X).

; , . , p a r e n t , o f f s p r i n g mother, , . 1.3. . , .. . ( ) . . . , , . : , , , . . 1.3, g r a n d p a r e n t Prolog : grandparent(X, Z) :- p a r e n t [ X , Y) , parent[ Y, Z).

. 1.3. , offspring, grandparent e

mother u

. Prolog . . , , , , , . . , . , grandparent :

32

I. Prolog

grandparent( X, Z) :p a r e n t ( X, Y), p a r e n t ( Y, Z) .

s i s t e r (. 1.4) : X Y X Y, 1) X Y 2) X - .

, 1.4. sister , . 1.4, Prolog : s i s t e r ( X, Y) :- parent ( Z, X), parentf Z, Y) , female(XI. , "X Y ". : Z X, 2 Y. , : 21 X, Z2 Y Z1 Z2. : ?- s i s t e r ( arm, p a t ) . "yes", (. . 1.1). , s i s t e r , , . , , : ?- s i s t e r ! X, pat) . Prolog , . X - arm; X - pat , ?! -, s i s t e r . , , Prolog . , X Y , X Y. , Prolog ( ) , X Y , , , , . , , X Y . , , , Prolog d i f f e r e n t different( X, Y) 1. Prolog 33

, X Y . s i s t e r : s i s t e r ) X, Y) :parent[ Z, X), parent ( Z, Y), female! X), different! X, Y) . . Prolog , . Prolog : , . , . , , , , . Prolog . , . . , . . () . . . , , " ". , . , hasachild! X) :- parent! X, Y) . . ) Y,

X Y, X . ) X, X , Y, , X Y.

1.3. Prolog. ) , , ( happy ). ) X, X , , X ( h a s t w o c h i l d r e n ) . 1.4. g r a n d c h i l d p a r e n t . : crandparer.t (. . 1.8). 1.5. aunt ( X, Y) p a r e n t s i s t e r . , aunt (), . 1.3.

34

I. Prolog

1.3. p r e d e c e s s o r (). p a r e n t . . () , . , X Z, X Z, . 1.5. , . 1.1, .

. 1.5. predecessor: a) X Z; ) Z : 2, X - Z, X - Z. Prolog : predecessor( X, Z) :parent(x, Z). , , , . , 1.6. , p r e d e c e s s o r : predecessor [ ., Z) :p a r e n t [ X , ) . p r e d e c e s s o r ( X , Z) :p a r e n t ( X, Y), p a r e n t [ Y, 2 ) . p r e d e c e s s o r ; X, Z) :parent ( X , YD , p a r e n t ! Yl, 42), p a r e n t ! Y2, 1) . predecessor( X, Z) :p a r e n t t X, Yl), 1, Prolog

35

parent [ Yl, Y2), parent! Y2, Y3), parent( Y3, Z ) .

. 1.6. , , , . , . p r e d e c e s s o r . , . , p r e d e c e s s o r . . 1.7 : ,, X - , Y, 1) X Y 2) Y - Z. Prolog1, , . predecessor( X, Z) :parent[X, Y ) , predecessor( Y, Z} . , p r e d e c e s s o r , : , . , , . predecessor( X, Z) :parent(X, Z) . predecessor( x, Z) :parent! x, ) , predecessor! Y, Z) . , p r e d e c e s s o r .

36

I, Prolog

, , , , . . ; , , . 1.7. , Prolog . , . Prolog. Prolog - .

. 1.7. predecessor

, Prolog , . , ?? - p r e d e c e s s o r ( pam, X = bob; X = aim; X = pat; X = j ira X).

Prolog, , p r e d e c e s s o r p a r e n t . : Prolog ? , Prolog, . , . 1.1. , : -, , -, , . 1.1. f a m i l y parent( parent[ parent[ parent[ parent( , bob) .torn, torn, bob. bob, bob) . liz) .

%

arm) . pat) .

1. Prolog

37

p a r e n t ( p a t , jira). female( pam). male( torn) . male( b o b ) . female[ l i z ) . female [ arm) . female[ p a t ) . malej j i m ) . o f f s p r i n g ! Y, X) :p a r e n t ! X, Y) , mother[ X, Y) :p a r e n t ( X, Y), female( X). grandparent( , 2) :p a r e n t ) X, Y), parent ( Y, Z). s i s t e r f X, Y! :parent* . ), p a r e n t ( Z, Y), female( X), d i f f e r e n t ! X, Y). p r e d e c e s s o r ! X, Z) :p a r e n t ! X, Z) . p r e d e c e s s o r ! Z) :p a r e n t ( Xr Y), p r e d e c e s s o r ! Y, Z) % - % -

% Y X, % X Y % X , % X Y % X - % X Z, % X Y h, Y Z % X Y, % X Y * X - % X Y % p r l : . - Z * 2: X - Z

, 1.1, : p a r e n t , male, female, p r e d e c e s s o r .. , p r e d e c e s s o r . , p r e d e c e s s o r . , . . 1.1 , p r e d e c e s s o r , , p r l 2, . . Prolog. , . Prolog " / * " "*/". , Prolog : / - */ , , " : t". , "%" , . \ -

1.6. p r e d e c e s s o r : predecessor! X, Z) :parent! X F Z).

38

I. Prolog

predecessor [ X, 2) :parent[ Y, Z), predecessor! X, ). p r e d e c e s s o r ? , . 1.7, .

1.4. Prolog Prolog. Prolog . , Prolog . " "? , , , . , : , , . , Prolog ( ), . , . Prolog - , , "". , Prolog : Prolog , , ; Prolog , .. , . Prolog . , . . - . : . , , : X, . - , . Prolog, . f a l l i b l e ! X} : - man; X } . % man( socrates). % - ?- f a l l i b l e ( s c c r a t e s ) . % ? yes % , (. 1.1), . ?- predecessor! torn, p a t ) . , p a r e n t ( ', p a t ) . p r l , , p r e d e c e s s o r ! bob, p a t ) . , , , . , , : 1. Prolog 39

parent[ bob, pat) ==> predecessor! bob, pat) : p a r e n t [ bob, pat) p r e d e c e s s o r { bob, p a t ] , p r l . , , p a r e n t ( torn, bob). predecessor; bob, p a t ) , , p r e d e c e s s o r ; torn, p a t ] , 2. , p r e d e c e s s o r ( torn, pat} . : parent;' bob, pat) ==> predecessor; bob, pat) parent; torn, bob) predecessor! bob, pat) ==> predecessor) torn, pat) , , , , .. , . . , Prolog . Prolog , , . , , , , , . : ?- predecessor; torn, p a t ) . Prolog . , . , p r l 2. , p r e d e c e s s o r . , . , p r l 2, Prolog. , : predecessor! X, Z) :- parent! X, Z). p r e d e c e s s o r ; torn, p a t ) , :X torn, Z p a t

p r e d e c e s s o r ; torn, p a t ) ; parent! torn, pat) , , . 1.8. , p a r e n t ; torn, p a t ) , . Prolog , p r e d e c e s s o r ( torn, p a t ) , 2 :predecessor! X, Z) :parent! X, Y ) , predecessor; Y, Z) .

, X Z : X = torn, Z = pat Y . p r e d e c e s s o r ; torn, p a t ) : parent ( torn, Y) , predecessorf Y, pat) 40 I. Prolog

. 1.9, , . 1.8.

. 1.8. ; , , , ,

. 1.9. , , . 1.8

Prolog , . , . Y bob. , , predecessor( bob, pat) p r l . , () . Prolog . , p r l :predecessor! X 1 , Z') :parent( X 1 , Z'),

p r e d e c e s s o r [ bob, p a t ] , : 1 = bob, z' = pat : parent( boh, pat) , . , . 1.10. (. . 1.10) . , . () , . , ( ) -, "yes". "yes", . Prolog , . Prolog , . , , Prolog .

1, Prolog

41

. 1.10. predecessor ( torn, pat). ,

1.7. , Prolog , 1.1. . 1.8-1.10. ? ) ?- p a r e n t ( pam, b o b ) . ) ?- mother( pam, b o b ) . ) ?- g r a n d p a r e n t [ pam, a n n ) . r) ?- g r a n d p a r e n t [ bob, j im) .

1.5. , , . , , Prolog, a , . , . , . , , , , Prolog.

42

!. Prolog

Prolog . Prolog , . , ( ) . , . , , , . Prolog. Prolog , Pascal. , , . , - , , . Prolog , .

Prolog . , : , . .^- , , , . , . , , . Prolog , . Prolog , , , , , , . Prolog , , . . Prolog: . . . : , , , ; , ; , ; ; 1. Prolog 43

, ; ; ; , , , ; , , , ; ; , .

Prolog . ( DEC-10, Prolog DEC-10, [9], [122]). , ISO Prolog, ISO/TEC 13211-1 [43]. Prolog . , . ., , .

44

I. Prolog

2

Prolog

... 2.1. 2.2. 2.3. Prolog 2.4. 2.5. : 2.6. 2.7. Prolog 45 52 56 58 62 66 73

Prolog . : (, , ); ; ; ( ) ; ; ; . 1, .

2 . 1 . . 2.1 Prolog. Prolog . , Prolog . 1 ; , . Prolog ( ) , .

2.1.1. 1 . , .. , : , , ..., Z; , , .... z; 0, 1, 2, .... 9; , "+", "-", "*", "/", "", "=", " : " , " . " , "&", . 1. , ("_"), : nil 2 5 _25 _25 :: -_ alpha ^ procedure miss_Jones sarah_j ones

2. :

R (jiopvo ; , ; " : - " . 3. , . , , , , . , :

46

!. Prolog

'Tom''Sarah Jones', Prolog, . , :: 1313 0-91

, , Prolog. , , : 3.14 -0.0035 100.2 Prolog . , Prolog , , , , , , . Prolog, , . , , & . - , . , 10000 + 0 . 0 0 0 1 - 10000

0 0. 0001.

2.1.2. , , . :

Result Object2 Participant_list ShoppingList

, . , . , : hasachildt X) :- parent; X, ). : " X, X , X ". , h a s a c h i l d , , , . , . , : hasachildl X) :- parent! X, _ ) . . , ,

2, Prolog

47

, , , : somebody_has_child :- parent! _, _ ) . : somebody_has_child ;- parent! X, Y). , , : 5omebody_has_child :- parent) X, X). , , Prolog . , , , :?- p a r e n t ( X, _>,

. , , XI5 , . 15 . : ( , ) .

2.1.3. ( ) , . , , . , : , , . , . . d a t e . , "1 2001 " {. 2.2):date( I, may, 2001)

. 2.2. ; ) ; ) , Prolog

. .

( ) , , :2001}

d a t e ( Day, may,

, Day - . . , Prolog , . 48 I. Prolog

Prolog . , may date! I, may, 2001) (. . 2.2). , . , , . , (. 2.3). ; , . , : p o i n t , ; , ; t r i a n g l e , .

, 2.3.

, . 2.3, :PI p o i n t ( 1 , 1 ) 2 - p o i n t ( 2 , 3 ! S = s e g < P I , 2) = s e g ( p o i n t ( 1 , 1 1 , p o i n t ( 2 , 3 ) } T - t r i a n g l e [ p o i n t ( 4 , 2 ) , p o i n t ( 6 , 4 } , p o i n t ("7,1)1

, 2.4, , , , . , , , point3:point3( X, Y, Zl

, p o i n t , - , , : point( XI, YD pointt X, Y, Z) , p o i n t , Prolog , 2. Prolog

, . , . 1. , , . 2. , .. .

, 2.4, , . 2.3

, Prolog , . , Prolog . . 2.5 , : ( + ) * ( - 5)

. 2.5. , , ( + ) * ( - 5)

, , , "*", "+" " - " , :* ( .+ [ , ) , - ( , 5) )

, , Prolog, . , , -

50

I. Prolog

, . Prolog , " * " , " + " " - " . , , 3. (. 2.6). . r l , -2, 4 , p a r z seq . Prolog. seq< r l , r2) par( r l , r2) par( r l , p a r ( r 2 , r3) 1 par( El, s e q ( p a r ( r 2 , r 3 } , r 4 ) )

.. 2.6. : ) rl z2; ) ; ) ; ) 2

2. Prolog

51

2.1. Prolog ? (, , , )?) Diana. ) diana. ) 'Diana'. ) _diana. ) 'Diana goes south', ) goes ( diana, south),

) 45. a) 5( X, Y>. ) -( north, west). ) three( Black< Cats)). 2.2. , Prolog. , . 2.4. , (, , ). , , .

2.2. , . . . , , , . 1. . 2. , . , d a t e [ D, , 2001) n d a t e t D l , may, Y1) . , . D D1. may, Y1 2001. , Prolog :D - D1 = may Y1 = 2 0 0 1

, d a t e ( D, , 2001) d a t e (Dl, Ml, 1444) ; d a t e [ X, Y, Z) p o i n t ( X, Y, Z), , , . , , 52 I. Prolog

, , , . . Prolog " = " :?- d a t e ; D, , 2001) = date< Dl, may, Y l ) .

D = D1, = may, Yl = 2001, . , . .D = 1 D1 = 1 = may Yl = 2001 D - third Dl = t h i r d M = rociy Yl - 001

, , D D1 , . , D D1, . Prolog . , ( , ). : ?- date! D, , 2001) = date ( Dl, may, Yl) ,date[ D, M, 2001) = date( 15, M, Y).

Prolog :D = D1

= may Yl = 2001

, .D = 15 D1 = 1 5 - may Yl = 2001 Y = 2001

, . , , S 1. 1. 3 , , . 2. S , , S . , , S. 3. S , , :

2. Prolog

53

) S ; ) . . , , , . 2.7. ( ). , . , () .triangle = triangle, p o i n t ( 1 , 1 ] = X, = point(4,Y), p o i n t (2,3) = p o i n t ( 2 , Z ) .

. 2.7, triangle! point (1,1), A, point (2,3)} = triangle { X, point (4, Y) , point (2, Z) )

, . : = point [1,1) = point(4, Y }Z = 3

, . (. , 2,4) . , Prolog . , . 2.8, , . , . ; -

54

I. Prolog

. , . , : vertical; seg ( point(X,Y), point (X, YD ). horizontal( segl point(X,Y), point(XI,Y)).

. 2.8. .

yes ?- v e r t i c a l ! seg; point [1,1), p o i n t ! 2 , Y ) ) ). no ;- horizontal! seg( point(l,l), point(2,YJ ) ), Y- 1

: ?- vertical( seg{ p o i n t t l , 1 ) , point(l,2) j ).

"yes", . . Y 1 . , - , {2,3)? ?- vertical( seg(point(2,3),PJ).P = point[2,Y}

, , (2,Y), , = 2. , Prolog , , ( Prolog1) : = point(2,_136) . _136 , , _13 , . , . : -, , , , -, - , "" . 2, Prolog 55

, , .? - v e r t i c a l ! S), h o r i z o n t a l ! S ) . s = segl p o i n t (X,Y), p o i n t (x,Y> )

Prolog , , , . . , X Y , . 2.3. ? , ? ) p o i n t ( , ) = p o i n t ! 1, 2). ) p o i n t ( , ) = p o i n t ( X, Y, 2). ) plus{ 2, 2) = 4. ) +( 2, D) = +{ , 2). ) t r i a n g l e ( p o i n t ( - l , 0 ) , 2, ) = t r i a n g l e ; PI, p o i n t ( l , 0 ) , p o i n t (0,Y)). . ? 2.4. , , , , = 5. 2.5. , r e c t a n g l e ! PI, P2, , 4), , . regular( R) , R .

2.3. Prolog 1, Prolog: . Prolog. . : 1Q, R.

, R . . , Q R . Q R .

. , Q, - .. Q, - R. 56 !. Prolog

, , , , . . , , . , . , . , . , : hasachildl ) :- parent( X, Y}. .hasachild( ) :- p a r e n t ! A, 3 ) . hasachildl XI) :- p a r e n t ( XI, 2) .

: hasachildt peter) :- patent! peter, 2). hasachildt barry! :- parent( barry, small(Caroline)). -, . G (.. , ), : 1. , , 2. I , , ) I G ) I . Prolog . , Prolog , . , . . , . Prolog , . . , :Q; R

: ? , Q R. , : :;Q. R.

, . :Q, R; S, , .

::-

(

Q,

R);

!

S,

T,

D) .

, ::Q, R. 5,'", U.

2. Prolog

57

2.6. : f( 1, one) . f ( s(1) , two) . f ( s ( s ( l ) ) , three) .f ( s(s(s(X) ) ) , f ( X, N) . N> :-

Prolog ? , , . ) ?- f{ s ( l ) , ). ) ?- f ( s ( s i l ) ) , two) . ) ?- f I s