1 / 13

Introduction to Prolog

Introduction to Prolog. Prolog Programs are: declarative language for symbolic programming (non-numeric) easy to create objects and relationships between objects consist of Facts and Statements (Clauses) they are “case” sensitive upper case used for variable names lower case used for facts

ghita
Télécharger la présentation

Introduction to Prolog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to Prolog Prolog Programs are: • declarative language for symbolic programming (non-numeric) • easy to create objects and relationships between objects • consist of Facts and Statements (Clauses) • they are “case” sensitive • upper case used for variable names • lower case used for facts • Output can be VERY terse i.e. Yes or NO unless you explicitly provide output statements • Goals are tests we perform to check the truth of certain statements • There are NO • For loops • Repeat While loops • IF..THEN statements • Type declarations • Gotos • Arrays • All of the above is handled by recursion

  2. Introduction to Prolog SWI-Prolog :

  3. Introduction to Prolog SWI-Prolog Tutorial: • The SWI-Prolog editor is divided into a section for code where several source files can be accessed and a command line interface for interrogating the knowledge base. Begin by creating a new program from the File menu and selecting New. Enter the code from listing 2.0, save the file to your H: drive. Go to Start from the menu and select Consult. If all goes well the following output will be sent to the window: • ?- consult('C:/prolog_code/example1.pl'). • % C:/prolog_code/example1.pl compiled 0.00 sec, 0 bytes • Try the following goals in the command line window: • ?- can_marry(jane,paul). • ?- can_marry(paul,jane). • Now create a new file for Listing 1.0 and run it.

  4. Introduction to Prolog SWI-Prolog Tutorial: male(fred). male(spot). male(paul). female(tigger). female(jane). female(sue). human(paul). human(fred). human(jane). cat(tigger). dog(spot). married(sue). can_marry(Person1,Person2):- %write(" can ", Person1, " marry ", " ",Person2," ? "), human(Person1), human(Person2), male(Person1), female(Person2), not(married(Person1)), not(married(Person2)). can_marry(fred,paul). % this is the goal, try entering different combinations of people

  5. Programming in Visual Prolog Our first Prolog program FAMILY.PL parent( ken, rebecca). % identifies ken as the parent of Rebecca - note full stop parent( fred, bob). parent( ken, bob). % this statement is what we are seeking to prove/disprove % parent (ken,rebecca).

  6. Programming in Visual Prolog Version 2 FAMILY.PL parent( ken, rebecca). % identifies ken as the parent of rebecca - note full stop parent(ken,ken_junior). parent( fred, bob). parent( steven, bob). parent( ken, X). % use a variable to list all children % parent (ken,rebecca). % parent(Parent,Child). % give variables meaningful names where possible

  7. Programming in Visual Prolog Version 3 FAMILY.PL parent( ken, rebecca). % parent(ken,ken_junior). parent( fred, bob). parent( steven,bob). parent( X, Y) , parent(Y, Z). % does anyone have grandchildren?

  8. Programming in Visual Prolog student(male,harry,biol). student(female,anna,biol). student(male,fred,math). student(male,bob,computing). student(male,john,chem). student(female,liz,biol). student(female,susan,math). student(female,caron,chem). student( X , Y , biol).% using variables with a fact % student(male, X, _ ). % using blank variables

  9. PEOPLE.PL Ver 1.0 displaylist(list) people1(list) people2(list) people1([joe,fred,anne,susan]). people2([tina,caron,alan,tom,john]). member(X,[X|_]). member(X,[_|Y]):-member(X,Y). displaylist([]). displaylist([H|T]):- write("person is - ",H), nl, displaylist(T). people1(X), displaylist(X).

  10. append([],L,L). append([H|T],M,[H|T1]):- append(T,M,T1). count([],0). count([_|T],N):-count(T,M),N = 1+M. displaylist([]). displaylist([H|T]):- write("person is - ",H), nl, displaylist(T). getlist([]). getlist([H|T]):- write("Enter item: "),readln(X),nl, not(X=end),H=X,getlist(T). Goal %people2(X), member(alan,X), count(X,M). %people1(Y), people2(X), append(X,Y,Z), displaylist(Z). getlist(M),nl,displaylist(M). PEOPLE.PL Ver 2.0 Domains list = symbol* Predicates nondeterm member(symbol,list) nondeterm getlist(list). displaylist(list) people1(list) people2(list) append(list,list,list) count(list,integer) clauses people1([joe,fred,anne,susan]). people2([tina,caron,alan,tom,john]). member(X,[X|_]). member(X,[_|Y]):-member(X,Y). displaylist([]). displaylist([H|T]):- write("person is - ",H), nl, displaylist(T).

  11. More Prolog Features Backtracking: • Backtracking enables the solution to a goal to be pursued should a sub-goal fail. It tries all possible solutions before admitting failure. The exhaustive search method employed by backtracking is a depth first search. Prolog keeps track of everything using internal markers I.e. to remember which clauses are true and which are false. These can cause stack overflow problems in programs using many recursive rules. • Control Backtracking because • may not need all the possible solutions - some may not even be useful. • may just need a single solution • too much backtracking can lead to slow program execution • Fail • The Fail command always causes backtracking to occur • Mainly used to list out data from a number of facts • The Cut • The cut “!” command is used to make programs more efficient • backtracking cannot retrace its steps past a cut • cut is also used to form repetitive loops and to make rules mutually exclusive

  12. Programming in Visual Prolog /* backtrack1.pro uses the fail command to force backtracking*/ predicates listplanes() nondeterm aeroplane(symbol) clauses aeroplane(hurricane). aeroplane(spitfire). aeroplane(comet). aeroplane(harrier). aeroplane(jumbo). aeroplane(dakota). listplanes:- aeroplane(Plane),write(Plane),nl,fail. goal listplanes().

  13. /* backtrack2.pl uses the cut command to stop backtracking*/ predicates nondeterm go() nondeterm menu() nondeterm repeat() nondeterm choice(symbol) clauses repeat. repeat:-repeat. go:- write("CUT MENU"),nl,nl, repeat, menu. menu:- write("Enter a, b, or e to end"), readln(X), choice(X), nl, !, X=e. choice(a):-write("Choice a"). choice(b):-write("Choice b"). choice(e):-write("Goodbye"). choice(_):-write("Try again.").

More Related