Escolar Documentos
Profissional Documentos
Cultura Documentos
TURBO PROLOG
2005
....................................................................................................................................2
1. -.................................................................................4
1.1 ...............................................................................................................................4
1.2 - ............................................................................................6
1.2.1 - .......................................................................8
1.2.2 , -.....................................9
1.2.3 " -!".........................................................9
1.2.4 .............................................................................10
1.2.5 .................................................................................11
1.2.6 ...................................................11
1.2.7 ...............................................................................................................12
1.4 .........................................................................................................................12
2. - ....................................................................12
2.1 ...............................................................................................................................12
2.2 ...........................................................................13
2.2.1 .....................................................................................................14
2.2.2 ......................................................................................16
2.3 ...................................................................................................18
2.3.1 .........................................................................................................19
2.3.2 ...........................................................................................................19
2.3.3 ..................................................................................21
2.3.4 ..........................................................................................21
2.3.5 ...........................................................................................................22
2.4 -............................................23
2.4.1 ...........................................24
2.4.2 .................................................25
2.4.3 ............................................................................................................................28
2.5 .........................................................................................................................34
3. - .........................................................35
3.1 .............................................................................................................................35
3.2 -...............................................................................35
3.2.1 ..............................................................................36
3.2.2 - ..........................................................40
3.3 ................................................................................................40
3.3.1 .........................................................42
3.3.2 ...........................................................44
3.3.3 ............................................................................48
3.3.4 ................................................................................................51
3.3.5 ...................................................................................................................54
3.3.6 .........................................................................56
3.3.7 ................................................................61
3.4 -..........................................................................................66
3.5 .........................................................................................................................68
4. ................................................................................................69
4.1 .............................................................................................................................69
4.2 ..............................................................69
4.3 ...........................................................................................................70
4.4 ...........................................................................................................72
4.4.1 .....................................................................................72
4.4.2 () ................................................................................78
4.4.3 (), ..............................................82
4.5 ........................................................................................86
4.5.1 ........................................................................................................86
4.5.2 () ........................................................88
4.6 ..................................................................................................95
5. ................................................................................................96
5.1 .............................................................................................................................96
5.2 -....................................................................................................96
5.2.1 ........................................................................................................97
5.2.2 .......................................................................98
5.3 ...................................................................................99
5.4 ..............................102
5.5. ...............................................................................104
5.5.1 ..........................................................................................105
5.5.2 .......................................................................................................107
5.5.3 .............................................................................................109
5.5.4 .................................................................................................111
5.6 .........................................................................................115
5.7. ......................................................................................................................118
1. -
1.1
- (Turbo Prolog) (). Borland International , -
.
- ?
- - .
.
- , , - . . - ,
-,
.
-
, , .
,
.
, ,
,
.
. - .
-
: Arity Prolog, Prolog II, Wisdom Prolog Micro Prolog.
- , . IBM PC,
(CGA) (EGA).
-.
, .
- , ,
, .
4
. . -
( IBM PC).
. ,
-
. , - -
.
?
"
" (Prolog PROgramming in LOGic). 1973 .
" " () . . , ().
C&M Prolog "
" .
, ,
.
- .
C&M, , . (
) - . . , - " ", ,
. . , - "" ,
,
.
-
, ,
. , , , , .
.
, , .
,
DO WHILE IF ... THEN.
5
. (
. 2)
.
- .
, . , ,
, , ,
.
?
, -,
,
. (, , ), (,
). ,
-. .
- ,
. " -" , , . -
.
- ,
, . , , .
- - . . -
,
. , -
,
- . , - ,
, ,
, , .
- IBM PC .
1.2 -
-
, 200 .
6
GeoBASE.
GEOBASE.INC
GEOBASE.DBA GeoBase.
GEOBASE.HLP GeoBase.
README.COM
README.
README
,
, -.
2. LIBRARY&SAMPLE PROGRAMS:
PROLOG.LIB , -
.
INIT.OBJ
EXAMPLES
, , .
ANSWERS
,
.
PROGRAMS
,
.
________________________________________________________
1.2.1 -
- 7 () .
;
, , . ,
.
7 -, :
1. (Run).
2. (Compile).
3. (Edit).
4. (Options).
5. (Files).
6. (Setup).
7. (Quit).
.
. , . ,
Edit E. ( , , . . Shift .)
Esc. ; Enter.
. - ( Editor ),
- (Dialog), (Message),
- (Trace). ,
, - - .
. Line 1 Col 1 ,
. . Indent , , Insert - ,
. WORK.PRO
; .PRO
, -. -
, WORK.PRO.
1.2.2 , -
, ,
. WELCOME.PRO. , , , , ,
.
Edit Enter ( E).
Editor - . -
.
WELCOME.PRO:
predicates
hello
goal
hello.
clauses
hello :write("Welcome to Turbo Prolog!"), nl.
,
Enter .
BackSpace. , ,
.
1.2.3 " -!"
-.
,
, Esc.
, Edit. Run
Message Dialog.
,
WELCOME.PRO. Run, . . Compile.
-
, . Run .
-, . , ,
9
-. , , , -
, - . hello.
*
1.1. WELCOME ,
.
-,
, . - , , .
Y. Quit , Esc.
1.2.4
, , (
), Esc, Files Save ( S,
Enter).
,
(, , WORK.PRO), ,
. , . WELCOME.PRO,
Enter.
( - ), .BAK, . , . .
. , "" . . ""
,
.
10
1.2.5
- ,
Files Directory
. , .PRO. , , Enter.
(File mask). *.PRO.
, . , Enter, , .
1.2.6
- , , . -
:
, . -
WordStar. WordStar, , , , -, -.
,
Files Load
Files. Enter,
.PRO. , , Enter. ,
, ,
.PRO. -, ; F1.
Help. , Help.
.
Shift-F10, ; Shift-F10 (
).
.
, - , 11
Print Files
, . ,
Files, -
Print. Print, .
1.4
, , -,
.
-. ,
.
, , ,
, , ,
.
2. -
2.1
- . , ,
- -
12
. , ,
- , .
. , - . ""
.
2.2
-,
. " " , .. .
,
, ,
,
, .
, () .
,
, .
, . , ,
.
. ,
, , , ,
.
,
. , , ,
.
. 60- . , ,
, .
, , .
( ) . ,
, .. "" , . , 13
, ,
. , . .
, , - .
, , , , .
,
. , , .
, , , . , , , ,
. , , - - , .
, ,
-, .
, ,
- .
2.2.1
, - - , , . , -
, .
. " ". ( ) .
,
, , , , . ,
:
,
, ,
. , -
14
,
.
, :
, ( )
, .. ,
. ,
:
,
, , , .
,
. " " "
, ( )" . . "" - , "" - .
. , .
, ,
:
, , , . :
, ,
.
:
, ( ) ,
"" "":
,
, "".
, "".
"" . , , :
, , "" , . "" -
15
, , "" .
, "",
. -
,
, , "".
, , ,
"" - . , ""
, "" ,
, .
"" "",
:
(), ()
: .
.
, .
2.2.2
" ",
. , , .
, , . , " " " "
,
, . ,
, . -, , .
:
16
(1,2)
(, )
-.
, ,
. , . ( ,
;
). , -,
:
(, ).
, . :
" ".
, " ,
" "",
. ,
"" ,
. , ,
- "" . - .
, "" -, .
"", ,
.
-
:
(1,2) (1,2)
(,
X)
(,
X)
. ,
. , , -
:
(, ).
(, X) (, X).
" " " , ". , , X ( ""), ,
. "" "", X "".
, - ,
"" X . , ,
, ,
17
, , . (
) ,
.
-
, " X ,
". -
, ,
. , - , -,
. , ,
.
, -, , , , - , -, , - .
-, , , .
- . , ,
, , .
"
".
2.3
, - , . , .
, , . -
. ,
"(, )", - True ()
False (); , -
, , ,
No solutions ( ).
. .
, , .
18
2.3.1
- , .
"" . - , ,
, .
, .
, ,
.
, - , , .
.
. , ( ) "". "" . ,
, "",
. :
(,).
, ,
, .
2.3.2
-
likes(mary, apples).
/* */
likes(beth, X) if likes(mary,X). /* , */
,
.
likes(beth,apples).
/* */
- ,
, .
. - likes.
likes(mary,apples).
, , likes, . likes , - beth mary.
- ,
. :
likes(beth, apples).
likes(mary, apples).
beth mary . , . - 19
, . -
likes(beth,X) if likes(mary,X).
likes(beth,X) .
, . -
, , if ( ).
- likes(beth, apples)
likes(beth, X) :
likes(beth, apples).
likes(beth, X).
. , apples X .
, , , X
"". , X,
.
"" .
, - , , ,
. X
, apples , - apples
X. X apples - .
, ,
.
X apples, likes(beth, X)
"" likes(beth, apples). - , apples X.
- if likes(mary,
X). X aplles, - " " , " ". , , , . "", , , , .
likes(mary, aplles).
- , likes(beth, apples).
, -
likes(mary, apples).
likes(mary,apples).
20
, . ,
likes(mary,apples) . ,
likes(beth, apples) . , likes(beth, apples). ,
. ,
.
2.3.3
likes(beth, apples) , -
, True.
likes(beth, oranges), ,
, False.
,
. -
.
finds(john, gold).
/* */
.
is(john, rich) if finds(john, gold). /* , */
/* */
. ,
, , . , , , .
- . ,
.
2.3.4
. , "
, ". :
married(john, mary) If wife(john, mary) and husband(mary, john).
, and
(). , , and. and (,). - and, , .. .
,
if (). :- ( ). , - :-,
"", - "". "" "" "" (married) :
married(john, mary) :wife(john, mary),
21
husband(mary, john).
, :- ,
. , . , .
(;) or ().
and (), -
or () ;. or . , .
- (
). ,
, - , .
, , :-,
. , ,
-.
2.3.5
, , ,
, , . ,
, , . , .
-, - ,
. ,
. ,
.
, , :
likes(mary, apples).
/* */
color(apples, red).
/* */
likes(mary, apples),color(apples, red).
, .
likes(mary,apples)
likes(mary,apples), .
color(apples, red),
. , , ,
. -, " ".
" ,
?". .
22
, , , " ?".
. , ,
. ,
, . , , . , ,
. False.
, ,
likes(mary, apples).
likes(mary, apples) :color(apples, red).
- " ,
". " ?",
likes(mary,apples).
-
likes(mary,apples). color(apples, red).
,
.
, -
. - .
, ,
. ,
color(apples, red). , - , . ,
.
, -
, , if ( :-) , , , .
. ,
. ,
-.
2.4 -
- ( )
.
.
23
, ( ) . , . - ,
, .
2.4.1
-
. , , .
:
likes(mary,apples).
/* */ employee(smith,john,1984).
/* */
gender(female).
/* -
*/
,
. , .
- , , . ,
mary beth.
:
likes(beth, apples).
likes(mary, pears).
likes(mary, oranges).
likes(mary, apples).
,
likes(mary,apples).
, .
mary apples . , - , , . (, , " ",
" "). , .
likes.
likes, , likes(beth, apples).
, likes .
mary beth, . likes.
, mary
.
.
24
- ( , ) . . .
,
. ,
, -. .
- , .
likes(mary, apples).
/* */
, , (
). :
likes(mary, What).
/* */
, - ,
, . What ().
, What . What .
, "" ( , ).
25
What , , . .
. What
apples, What apples.
What ( ) apples. ,
().
What apples, -
"" apples. ,
, . - , What=apples , , () ,
.
, :
likes(mary, apples).
/*
*/
likes(mary, pears).
/*
*/
likes(mary, popcorn). /* */
, likes(mary, What)
. - What, . - , . .
, What apples,
pears popcorn , .
. , .
, ,
" " . , , ,
.
. -
. , .
, , . , "
" , "
" . ,
,
26
- , .
, . . , .
= . , , = " ",
X=6. = . , X 6, . . 6 X. = - . =
, IF X=6 GOSUB 3010. = , , : " , , ,
". =
. (
).
- = ,
, .
, ,
apples = apples .
, . , =
. , .
apples = oranges .
, .
, :
X = apples .
,
- . .
apples X ( )
, X . X , apples. ,
; , .
- = , . , , .
, . - ,
= ; 27
. , , Fruit () .
apples=Fruit apples
Fruit. , Fruit=X
, X . X apples.
, Fruit X , - () .
. - . X=oranges.
X apples
. oranges () . , - . apples=oranges . , . Fruit X .
= . -, =
-. -,
, = ,
.
,
.
, .
, , ..
.
, , .
2.4.3
- , - , , .
. , -
, , .
, . .
, , . ( )
28
. .
, ( ) . ,
, .
, , , .
, - ,
. , , - . - ,
. , . , , . ,
- ,
.
-
. .
, ,
, - " ",
.
, - "".
, , .
, -
,
, .
, - . -
.
, , - .
. ,
.
,
. ,
,
.
likes:
likes(mary, pears).
/* */
29
likes(mary, popcorn). /* */
likes(mary, apples).
/* */
, ,
:
likes(beth,X) :/* ,
*/
likes(mary,X),
/* ,
*/
fruit(X),
/* ,
*/
color(X,red).
/* */
likes(beth,X) :/* , */
likes(mary,X),
/* ,
*/
X=popcorn.
/* */
:
fruit(pears).
/* - */
fruit(apples).
/* - */
color(pears, yellow).
/* */
color(oranges, orange). /* */
color(apples, red). /*
*/
color(apples, yellow). /*
*/
,
-.
.
,
:
likes(beth, X).
" Beth?". ,
, -
, . likes,
, . - ( ).
, beth mary.
-
:
likes(beth, X) :likes(mary, X),
fruit(X),
color(X, red).
, , ,
. ( )
, ,
- , .
, - , ,
, .
30
likes ,
-
likes.
likes(mary, X). ,
-
likes likes(mary, X). ikes(mary,
X), , X pears
. likes(mary, X) ,
,
, . likes.
, likes, . , ,
.
likes(beth, X) likes(beth, X).
likes(beth, X)
.
likes(mary, X). ,
,
color(pears,red). .
, fruit(pears).
, , likes(mary,popcorn).
X - pears. , , - likes(mary,popcorn).
, 4,
likes. X popcorn,
"
".
fruit(popcorn)
, , likes(mary,X) . X , likes(mary,X)
likes(beth,X) , , . 4.
likes(mary, apples), X
apples. ruit(apples).
fruit pears. ,
fruit(apples), .
, . color.
color(apples, red). color,
color(pears, yellow), color(oranges, orange) color(apples, red). apples ( X) apples , red yellow
, . ,
color(apples, red), color(apples,
red).
.
X, apples,
. X, apples, c
likes(beth, apples) :likes(mary, apples),
fruit(apples),
color(apples, red).
X=apples, - ,
.
. co
32
color(apples,red).
color . color(apples, red). . X apples. ,
: likes(beth, apples).
likes(beth, X).
, - X=apples. , "
" -,
. , X
.
,
. 1. 2 ,
.
popcorn=popcorn.
, . X popcorn.
, likes(beth, popcorn). -
, X=popcorn. ,
likes(beth, popcorn).
-
.
, likes. ,
likes(mary, X).
X , apples
. likes
, ,
likes(mary,apples). , -
X=popcorn apples=popcorn. , .
likes(beth, X).
likes(mary, X), , .
likes(beth, X), - beth mary, .
, . . ,
, - Two solutions ( ).
2.5
-
. , - , . .
,
-. () (). ,
. ,
.
- , ,
-.
.
34
.
, "" . . -
. , ,
, .
, -.
, ,
. , , , -.
3. -
3.1
-,
, , . 2.
-
;
-.
.
,
. ,
-.
3.2 -
, -,
. , , ,
. domains, database, predicates, goal clauses
.
:
- domains , , ;
- database ,
. -
35
, . . 9 ;
- predicates ;
- goal - .
, ;
- clauses , . , .
, ,
, .
-
, /* */. , . , ,
,
, , , ,
.
3.2.1
. 2
likes, , ,
likes(mary, apples).
, likes ( ),
mary apples - . -
.
, , , -
. predicates, , .
likes ,
:
predicates
likes(symbol, symbol)
, likes
symbol. -; .
, ,
. , likes ",
" ", ". -
. , , likes -
36
har
integer
real
-32768 32767
+1-307 +1308
-
'a', 'b', '#', 'B', '\13', '%'
37
string
symbol
file
( 250)
"today", "123",
"just_a_reminder"
1.
pay_check, school_day,
, flower
;
-
2. - "Stars and Stripes",
, "singing in the rain"
DOS
mail.txt,
BIRDS.DBA
:
payroll(employee_name, pay_rate, weekly_hours)
:
employee_name = symbol
pay_rate = integer
weekly_hours = real
employee_name , . ,
pay_rate - , weekly_hours - .
, payroll,
payroll("John Walker",16,45.25).
payroll("Arthur Berman",28,32.50).
payroll("Sandy Taylor",23,40.00).
*
, -, , , . predicates.
, . , , ,
go
do_menu
repeat
look_for_fruits
search_for_items
, .
, go - ,
.
38
do_menu ,
, .
"", .
, , ,
, . ,
likes(beth, X) if
likes(mary, X).
.
predicates:
predicates
likes(symbol,symbol)
book(symbol,symbol,integer)
/* (, , ) */
person(symbol,char,integer)
/* (, ( ), ) */
do_search(integer)
sum(real, real, real, real)
,
, . likes
, symbol.
likes(mary,peaches).
likes(john, plums).
likes(jack,oranges).
: mary, peaches, john, plums, jack oranges , ,
predicates.
, ,
.
, , , , domains predicates :
domains
name, fruit = symbol
predicates
likes(name,fruit)
C ,
name , fruit - . , , likes(mary,rain), , ,
. rain () 39
. thing
item. peaches rain .
, .
book
book("Tom Sawyer","Mark Twain",1855).
book("Man and Superman","Bernard Shaw",1905).
,
symbol, - integer.
book(symbol,symbol,integer)
, ,
domains
title, author = symbol
year
= integer
predicates
book(title, author , year)
, .
3.2.2 -
, -,
250 ,
( a z).
, (_) , :
employee_name
color_of_box
wild_animal_kingdom
beginning_of_year_to_date_activities_report
, , . , , - . - , - :
domains
a, b = symbol
predicates
s(a,b)
clauses
s(brave,daring)
3.3
-. .
40
synonym(brave,daring).
synonym(honest,truthful).
synonym(modern,new).
synonym(rare,uncommon).
, - .
3.3.1
-
, , ..
. - . -
; "" .
*
" " , , . , .
, , ,
. -
synonym(brave, X)
, . (, - .) , : " , synonym, , brave,
".
, - , synonym. brave , .
daring.
:
A synonym for 'brave' is
write, "" -. , .
write
write("A synonym for 'brave' is ")
A synonym for 'brave' is ;
. write , .
42
write(X),
- . daring, write
daring .
,
write.
write .
. -
, , - .
:
write("Today is the ",N,"th day of ",M,", a ",D,".").
Today is the 19th day of August, a Tuesday.
( 19 , )
N, M D 19, August
Tuesday.
: nl. nl . , .
; , , -
daring; . , nl, , daring.
, , , ; , ,
.
.
*
,
, - . ,
, " " goal
, Dialog Goal: .
, : "
modern ?" , ,
Q ,
- , .
synonym(modern,Q).
.
, , . - . , , ; Esc
.
43
, . , , , , .
, .
,
.
*
3.1. ,
capital(state,city) /* (, ) */
, ,
. , goal. ,
, , , , .
,
: ?
?
3.3.2
, - ,
.
. likes(mary, apples) 2.
, -, . "" likes(mary,apples), runs(john,6.3)
drinks(beth,tea,coke). watches(john,
cats), -
watches, . watches.
, . watches : john cats. ,
.
, ,
, -
. watches(john,cats) john, cats
symbol. , , .
:
go_home
44
female(person)
father(person,person)
owns(person,book,book) europe(country,country,coutry,country)
person, book country.
;
.
go_home
go_home
0
female(person)
female(betty)
1
female(katty)
father(person,person)
father(john,kathy)
2
father(john,tom)
owns(person,book,book) owns(sam,"Hobbit","Lord
3
of the Rings")
europe(country,country, europe("France","Germany",
4
country,country)
"Spain","Italy")
, go_home, , . ,
, ,
go_home if condition(sickness)
go_home if (condition(sickness) and transportation(bus))
1
. female ,
betty .
2 . ,
father(person,person)
father(john,kathy)
, john kathy. , :
father(kathy,john)
"" " kathy e john". .
2
- .
europe("France","Germany","Spain","Italy")
: France, Germany, Spain Italy
country. , .
"" ( 3.2)
" ". synonym : . antonym . "45
" .
_____________________________________________________________
3.2
/* : : PROG0302.PRO
*/
/* : */
/*
.
*/
domains
word,
syn1, syn2, syn3,
ant1, ant2, ant3 = symbol
predicates
synonym(word,syn1,syn2,syn3)
antonym(word,ant1,ant2,ant3)
goal
synonym(brave,S1,S2,S3) and
write("The synonyms for 'brave' are ")
and nl and write(S1,",",S2,",",S3,".") and nl and
antonym(rare,A1,A2,A3) and
write("The antonyms for 'rare' are") and nl and
write(A1,",",A2,",",A3,".") and nl.
clauses
synonym(brave,daring,defiant,courages).
synnym(honest,truthful,open,sincere).
synonym(modern,new,novel,recent).
synnym(rare,uncommon,scarce,infrequent).
antonym(brave,cowardly,fearful,timid).
antoym(honest,dishonest,crooked,deceithful).
antoym(modern,ancient,old,obsolete). antonym(rare,common,ordinary,ubiqutious).
/*****
*****/
____________________________________________________________
"" .
brave, - rare.
,
and, .
, .
*
3.2. 3.1 ,
46
cities_of_state(state,city1,city2,city3,city4)
/* (,1,2,3,4) */
. ,
.
"" ( 3.3)
.
.
president(name,party,state,birth_year,year_in,year_out)
/* (, , , , , ) */
,
domains.
____________________________________________________________
3.3
/* :
*/
/* : ()
*/
/*
.
*/
domains
name,party,state = symbol
birth_year,year_in,year_out = integer
predicates
president(name,party,state, birth_year,year_in,year_out)
goal
president(X,democrat,S,Yb,Yi,Yo),nl, write(X," - democrat"),nl, write("State
",S),nl,
write("Birth year - ",Yi),nl, write("Year-in - ",Yi),nl, write("Year-out ",Yo),nl,nl.
clauses
president(eisenhower, republican, texas, 1890,1953,1961).
president(kennedy, democrat, massachusetts, 1917,1961,1963).
president(johnson,democrat,texas, 1908,1963,1969).
president(nixon,republican,california, 1913,1969,1974).
president(ford,republican,nebraska, 1913,1974,1977).
president(carter,democrat,georgia, 1924,1977,1981).
/*****
*****/
___________________________________________________________
47
3.3. "".
, ,
:
president(X,republican,S,Yb,Yi,Yo).
().
3.3. ". , , :
president(X,republican,S,Yb,Yi,Yo).
().
3.3.3
, , , .
.
, , , , ,
- ,
, .
, .
48
- ,
, . . . ,
, .
. : . , - . , .
: ?
: - .
: ?
: , - . , - .
,
. :
- ,
- ,
.
"" (if), . , "" , , ""
- .
, . , ,
, -:
male("Frank"). /* - */
male("Sam").
/* - */
female("Mary"). /* - */
female("Debbie"). /* - */
parents("Sam","Frank","Mary"). /*
*/
parents("Debbie","Frank","Mary").
/* */
, ,
-:
sister(Sister,Brother) if female(Sister),
parents(Sister,Father,Mother),
parents(Brother,Father,Mother).
, ; Sister, Brother, Father Mother .
parents Sister Brother. female
.
.
49
,
. ,
,
. , , , .
- . , . ,
-.
"", , clauses
. ,
. :
who_is_the_son if
son(parents,_,_),
male(Son),
write("The son is ",Son,"."),
nl.
clauses . , "The son is Sam".
.
. - . ,
""
. 9 10.
*
3.4. "" , . ,
. , .
3.3.4
51
3.5
/* :
*/
/* : . */
domains
man = symbol
predicates
choice(man)
short_height(man)
/* */
medium_height(man) /* */
tall_height(man) /* */
black_hair(man) /* - */
brown_hair(man)
/* - */
blond_hair(man) /* - */
old_car(man)
/* */
new_car(man) /* */
sports_car(man) /* */
kathy_choice(man)
who_is_the_choice
goal
who_is_the_choice.
clauses
/* */
choice(bill).
choice(jim).
choice(mark).
choice(robert).
choice(willy).
choice(tom).
choice(frank).
short_height(bill).
short_height(tom).
medium_height(bill).
medium_height(tom).
tall_height(jim).
tall_height(robert).
tall_height(frank).
black_hair(bill).
black_hair(willy).
brown_hair(jim).
brown_hair(tom).
blond_hair(mark).
blond_hair(robert).
52
blond_hair(frank).
new_car(bill).
new_car(willy).
new_car(frank).
old_car(mark).
old_car(tom).
sports_car(jim).
sports_car(robert).
/* */
who_is_the_choice :kathy_choice(Choice),
write("Kathy's choice is ",Choice,"."),
nl.
kathy_choice(Choice) :choice(Choice),
tall_height(Choice),
blond_hair(Choice),
sports_car(Choice).
/*****
*****/
_____________________________________________________________
clauses 7 choice
bill, jim, mark, robert, willy, tom frank.
short_hair, medium_height, tall_height, black_hair, brown_hair, blond_hair,
new_car, old_car sports_car .
,
kathy: , , .
,
, .
kathy_choice(Choice) :choice(Choice),
tall_height(Choice),
blond_hair(Choice),
sports_car(Choice).
, choice ,
: tall_height, blond_hair, sports_car.
hoice
choice. likes, -
, ; , Choice bill.
53
, tall_height. , - choice
. Choice jim. jim
kathy . . , - blond_hair. ,
,
choice. ,
Choice,
tall_height(Choice),
blond_hair(Choice),
sports_car(Choice).
, .
*
3.5. " ",
, , .
3.3.5
, . , ,
.
border(country,country)
, " ",
border("France", "Germany").
,
, .
:
euro_pair("France","Germany"). euro_pair("France","Spain").
euro_pair("France","Italy"). euro_pair("Germany","Spain").
euro_pair("Germany","Italy"). euro_pair("Spain","Italy").
:
border("France","Germany").
border("France","Spain").
border("France","Italy").
, ,
.
, ,
, -
54
. border
not:
not(border(Country1,Country2)).
.
" " ( 3.6) -
- .
_____________________________________________________________
3.6
/* : : PROG0306.PRO */ /* : . */ /* : .
*/
domains
country = symbol
predicates
euro_pair(country,country)
border(country,country)
find_non_border_pair
goal
find_non_border_pair.
clauses
/* */
euro_pair("France","Germany"). euro_pair("France","Spain").
euro_pair("France","Italy"). euro_pair("Germany","Spain").
euro_pair("Germany","Italy"). euro_pair("Spain","Italy").
border("France","Germany").
border("France","Spain").
border("France","Italy").
/* */
find_non_border_pair :euro_pair(X,Y),
not(border(X,Y)),
write(X," - ",Y),nl.
/*****
*****/
_____________________________________________________________
-
. , not . ,
,
55
. , ,
. :
not (border("Germany", "Spain")).
True,
, .
:
not (border("France", "Italy")).
False, .
*
3.6. .
Goal: not(border("Spain","Italy")).
?
3.3.6
,
6 . :
owner("Mary","Garfield"). /* */
Mary ;
. Garfield. , , . , ,
, .
owner , Mary Garfield, Mary, . , :
owner("Mary",pet("Garfield")). /* - */
owner("Mary",book("Garfield")). /* - "" */
, ,
.
owner ,
. pet Garfield
, book - , pet book . , , ,
.
likes("Tom",apples,orange,banana).
, : , .
:
fruits(apples,orange,banana).
, :
likes("Tom",fruits(apples,orange,banana)).
(O .)
56
fruits . .
, .
likes.
- domains.
domains
personal_liking = fruits(type1,type2,type3)
type1,type2,type3 = symbol
personal_liking , fruits. fruits .
, . apples, peaches oranges (
symbol), .
, . apples, r 16. apples
symbol, r - char, 16 - integer. .
. . .
*
"" ( 3.7)
personal_library.
.
____________________________________________________________
3.7
/* :
*/
/* : */
/*
.
*/
domains
personal_library = book (title, author, publisher, year) /*
= (,,
, ) */
collector, title, author, publisher = symbol
year = integer
predicates
collection(collector, personal_library)
/* ( , ) */
clauses
57
author publisher. (, .)
.
*
3.7. : , "Database.A Primer." ?
collection(Collector,book("Database:A Primer",_,_,_)).
?
3.8. : ,
1980 ? :
collection(_,book(Title,_,_,Year)),Year > 1980.
?
" - 2" ( 3.8) .
____________________________________________________________
3.8
/* : -2
*/
/* : */
/*
.
*/
domains
personal_library = book(title,author,publication)
publication = publication(publisher,year)
collector,title,author,publisher = symbol
year = integer
predicates
collection(collector,personal_library)
clauses
collection("Kahn",
book("The Computer and the Brain",
"von Neumann",
publication("Yale University Press", 1958))).
collection("Kahn",
book("Symbolic Logic",
"Lewis Carroll",
publication("Dower Publications", 1958))).
collection("Johnson",
book("Database: A Primer",
"C.J.Date",
publication("Addison-Wesley", 1983))).
59
collection("Johnson",
book("Problem-Solving Methods in AI", "Nils Nilsson",
publication("McGraw Hill", 1971))).
collection(smith,
book("Alice in Wonderland", "Lewis Carroll",
publication("The New American Library", 1960))).
collection(smith,
book("Fables of Aesop",
"Aesop-Calder",
publication("Dover Publications", 1967))).
/*****
*****/
_____________________________________________________________
" - 2" ,
"". , publisher year
publication - . :
personal_library = book(title,author,publication)
publication = publication(publisher,year)
collector,title,author,publisher = symbol
year = integer
, . .
. - book publication,
publication book. , . , ; , , .
*
3.9. " - 2"
collection(smith,Books).
collection(Collector,book(Title,_,publication(_,1967))).
Kahn ?
3.10. " -2". title author volume,
volume = volume(author,title)
.
.
. :
60
collection(_,Book(Volume,_)).
? ,
.
3.3.7
. - . ,
, . - . "" (
3.9) :
_____________________________________________________________
3.9
/* : */
/* : */
/*
.
*/
domains
thing = misc_thing(whatever)
;
book(author, title)
;
record(artist, album, type)
person, whatever,
author, title,
artist, album, type = symbol
predicates
owns(person, thing)
clauses
/* */
/* */
owns("Bill", misc_thing("sail boat")).
owns("Bill", misc_thing("sports car")).
owns("Jack", misc_thing("Motor cycle")).
owns("Jack",
misc_thing("house trailer")). owns("Beth",
misc_thing("Chevy wagon")).
owns("Beth", misc_thing("Piano")).
owns("Linda", misc_thing("motor boat")).
/* */
owns("Bill",
book("J.R.R. Tolkein",
"Return of the Ring")).
owns("Bill",
book("James A. Mishener", "Space")).
owns("Jack", book("Manuel Puig",
61
personal_records("Bill",record("Elton John",
"Ice of Fire","popular")).
"" 3 .
misc_thing, whatever.
B book; - author title.
record; : artist,
album type.
symbol. thing.
thing = misc_thing(whatever)
;
book(author,title)
;
record(artist,album,type)
(;).
, ,
:
person(person, things)
owns . ,
.
""
:
owns(P,misc_thing(T)).
: " , - ." owns(_,book(A,T)) owns(P,record(_,A,_)).
, misc_thing, book record
. , .
-
. - ,
.
*
3.11. ""
owns(_,book(_,T)).
?
.
3.12. :
owns(P,record(_,A,_)).
?
.
63
fail.
show_records.
/*****
*****/
___________________________________________________________
.
. ( show_books.
.)
show_misc_things :owns(Owner, misc_thing(Whatever)),
write(Owner," ",Whatever), nl,
fail.
: "
".
show_books :owns(_,book(_,Title)),
write(" ",Title), nl,
fail.
: " , ."
-
show_records :owns(Owner,record(_,Album,_)),
write(" ",Owner," ",Album), nl,
fail.
: " ."
"", - .
*
3.13. :
(popular) .
, . ?
3.4 -
- :
. , , . - . "" ( 3.11)
66
, .
____________________________________________________________
3.11
/* :
*/
/* : . */
predicates
add(integer,integer).
substruct(integer,integer).
multiply(integer,integer).
divide(integer,integer).
fadd(real,real).
fsubstruct(real,real).
fmultiply(real,real).
fdivide(real,real).
goal
write("
Results"), nl, nl,
add(44, 23),
substruct(44, 23),
multiply(44, 23),
divide(44, 23),
fadd(12.65, 7.3),
fsubstruct(12.65, 7.3),
fmultiply(12.65, 7.3),
fdivide(12.65,7.3), nl,
write("
All done, bye!").
clauses
add(X,Y):Z = X + Y, write("Sum = ",Z), nl.
substruct(X,Y):Z = X - Y, write("Diff = ", Z), nl.
multiply(X,Y):Z = X * Y, write("Pro = ", Z), nl.
divide(X,Y):Z = X / Y, write("Quo = ", Z), nl.
fadd(P,Q):R = P + Q, write("Fsum = ",R), nl.
fsubstruct(P,Q):R = P - Q, write("Fdiff = ",R), nl.
fmultiply(P,Q):R = P * Q, write("Fpro = ",R), nl.
fdivide(P,Q):R = P / Q, write("Fquo = ",R), nl.
/*****
*****/
67
____________________________________________________________
, ,
add(X,Y):Z = X + Y, write("Sum = ", Z), nl.
substruct(X,Y):Z = X - Y, write("Diff = ", Z), nl.
multiply(X,Y):Z = X * Y, write("Pro = ", Z), nl.
divide(X,Y):Z = X / Y, write("Quo = ", Z), nl.
, ,
fadd(P,Q):R = P + Q, write("Fsum = ",R), nl.
fsubstruct(P,Q):R = P - Q, write("Fdiff = ",R), nl.
fmultiply(P,Q):R = P * Q, write("Fpro = ",R), nl.
fdivide(P,Q):R = P / Q, write("Fquo = ",R), nl.
, . , . . , . 3.17.
,
. .
*
3.14. , .
sum(real,real,real,real,real)
. "".
3.15.
:
sum(3.9, 4.6, 2.6, 9.7, Z).
?
3.5
-. ,
, . -.
68
. . , .
.
.
4.
4.1
. -
, . ,
. :
, , , , .
, ,
, .
, . - fail cut , . ,
.
4.2
-, . , , , -, ( ) . , ,
.
, . , - . -, , , , , .
, , :
repetitive_rule :/* */
< >,
69
fail.
/*
*/
< > , , , . fail () ,
.
, , :
recursive_rule :/* */
< >,
recursive_rule.
,
recursive_rule.
.
, . .
, , .
. , .
, .
,
. ,
.
- "" ,
, ,
.
, . , .
4.3
- , , .
. , ,
. , , . , - , .
, :
plays(tom,football)
/* */
/* */
plays(john,soccer)
/* */
70
/* */
plays(john,volleyball) /* */
plays(tom,basketball) /* */
plays(tom,volleyball) /* */
plays(john,baseball)
/* */
,
.
:
plays(john,G),plays(tom,G).
, . G. G,
.
plays(john,G), -
.
plays(john, soccer) ,
G soccer.
plays, . -
G soccer. , .
- . G
soccer, plays(tom, soccer). ,
. , .
, -
. , , G
-
plays(john,G).
plays(john,volleyball). G volleyball. .
-
plays(tom,volleyball).
. G volleyball
. . , .
, .
, , . , , G,
71
, .. G=volleyball.
,
.
- fail () cut ().
, ()
().
-
( )
. ,
, , , . 2
, , .
.
.
4.4
, . (
. 2 3). ( 10),
. ,
.
.
, -
. ,
. ,
,
.
-.
.
4.4.1
, ()
.
fail. ( 4.1)
.
. Here
are the cities ( ).
72
. cities(City) City () .
. fail ,
.
4.1
__________________________________________________________
/* : */
/* :
*/
/*
fail
*/
domains
name=symbol
predicates
cities(name)
show_cities
goal
write("Here are the cities:"),nl
show_cities
clauses
cities("ANN ARBOR ").
cities("ATLANTA").
cities("NEW HAVEN").
cities("INDIANAPOLIS").
cities("BOSTON").
cities("MESA").
cities("MINEAPOLIS").
cities("SAN ANTONIO").
cities("SAN DIEGO").
cities("TAMPA").
show_cities :cities(City),
write("
", City), nl,
fail.
_____________________________________________________
4.1 , 10 ,
cities(name).
,
City ,
ANN ARBOR ( ). , cities(ity),
73
. ANN ARBOR
.
fail , 1,
, .
*
4.1. , 66, 46, 32, 93, 44, 98, 37, 16, 12. .
4.2.
, ?
, . 10 , 10 . , cities(ity).
,
.
( 4.2) .
4.2
_______________________________________________________________
/* :
*/
/* :
*/
/*
- */
domains
name, sex, department = symbol
pay_rate
= real
predicates
employee(name,sex,department,pay_rate)
show_male_part_time
show_data_proc_dept
goal
write(" "), nl, nl,
show_male_part_time.
clauses
employee("John Walker
","M","ACCT",3.50).
employee("Tom Sellack
","M","OPER",4.50).
employee("Betty Lue
","F","DATA",5.00).
employee("Jack Hunter
","M","ADVE",4.50).
employee("Sam Ray
","M","DATA",6.00).
74
Sex=M. ,
, :
show_male_part_time :employee(Name, Sex, Dept, Pay_rate),
Sex="M",
write(Name,Dept, "$", Pay_rate),
nl,
fail.
, - . , , , . fail , , .. .
fail , ,
.
,
, (Data
Processing Department). , Dept Data.
:
show_list_data_proc :employee(Name,Sex,"DATA",Pay_rate),
write(Name,Sex,"$",Pay_rate),
nl,
fail.
show_list_data_proc :employee(Name,Sex,Dept,Pay_rate),
Dept="DATA",
write(Name,Sex,"$",Pay_rate),
nl,
fail.
- . : , , , . ,
( 4.3), .
4.3
_________________________________________________________
/* :
*/
/* :
*/
/*
*/
/*
-
*/
76
domains
name, sex, department = symbol
pay_rate,hours, gross_pay = real
predicates
employee(name,sex,department,pay_rate,hours)
make_pay_roll_report
compute_gross_pay(pay_rate,hours,gross_pay)
goal
write(" "),
nl, nl,
make_pay_roll_report.
clauses
employee("John Walker
","M","ACCT",3.50,40.00).
employee("Tom Sellack
","M","OPER",4.50,36.00).
employee("Betty Lue
","F","DATA",5.00,40.00).
employee("Jack Hunter
","M","ADVE",4.50,25.50).
employee("Sam Ray
","M","DATA",6.00,30.00).
employee("Sheila Burton ","F","ADVE",5.00,32.50).
employee("Kelly Smith ","F","ACCT",5.00,25.50).
employee("Diana Prince ","F","DATA",5.00,20.50).
make_pay_roll_report :employee(Name,_,Dept,Pay_rate,Hours),
compute_gross_pay(Pay_rate,Hours,Gross_pay),
write(Name,Dept," $", Gross_pay),nl,
fail.
compute_gross_pay(Pay_rate,Hours,Gross_pay) :Gross_pay = Pay_rate * Hours.
_________________________________________________________
employee :
employee(name,sex,department,pay_rate,hours)
/* (, , , _, ) */
pay_rate ( ), hours () gross_pay
() real, . :
compute_gross_pay(Pay_rate, Hours, Gross_pay) :Gross_pay=Pay_rate*Hours.
make_pay_roll_report ( ) . comute_gross_pay
.
77
*
4.3.
, .
4.4.
, 5 .
4.5. ,
. , , , . -, .
, ,
6.5% .
4.4.2 ()
. , , , , ,
. () ,
.
. , , 18 19 ,
B , ,
.
, .
, fail
. , , ,
, .
- cut (). cut
(!). , ,
"" , .
, cut " ",
. ,
. cut . , , cut, cut cut.
fail ,
,
78
, . cut .
,
,
child () ,
( 4.4).
4.4
____________________________________________________________
/*:
*/
/* :
*/
/*
cut (!) -
*/
domains
person = symbol
predicates
child(person)
show_some_of_them
make_cut(person)
goal
write(" "),
nl, nl,
show_some_of_them
clauses
child("Tom ").
child("Beth ").
child("Jeff ").
child("Sarah
child("Larry
child("Peter
child("Diana
child("Judy
child("Sandy
").
").
").
").
").
").
show_some_of_them :child(Name),
write(" ", Name),
nl, make_cut(Name),!.
make_cut(Name) :-Name="Diana".
_________________________________________________________
79
, Diana
. cut . fail Diana. , cut
fail. (). , .
child(person). 9 .
, ( )
:
show_them_all :child(Name),
write(" ", Name), nl,
fail.
. ,
cut, ,
, , . Name=Diana. , ,
:
make_cut(Name) :Name="Diana".
cut (!)
make_cut ( ). , , Name
Diana. make_cut
, , cut.
, ,
-:
show_some_of_them :child(Name),
write(" ", Name), nl,
make_cut(Name),!.
make_cut(Name) :Name="Diana".
, -.
, . , Name=Beth, Beth . - .
*
4.6. make_cut ,
, Peter .
80
, , . , 4.5, - .
4.5
_______________________________________________________________
/* : */
/* :
*/
/*
cut (!) -
*/
domains
name = symbol
predicates
child(name)
go_and_get_them
goal
go_and_get_them
clauses
child("Tom ").
child("Alice
child("Diana
child("Alice
child("Beth ").
child("Lee ").
child("Alice
").
").
").
").
Name="Alice",
write(" ", Name),nl,
fail.
Alice ,
.
get_alice () Name, .
Name. :
get_first_alice :child(Name),
Name="Alice",
write(" ", Name), nl,
!,
fail.
,
Alice. () get_first_alice.
. ,
, fail . ,
, cut , fail . ,
,
. , .
*
4.7. ,
. :
a) , ,
. :
child(First_name, last_name).
b) ,
;
c) ,
Smith ();
d) , Alice;
e) .
4.4.3 (),
-, -, . - -,
82
.
.
, , :
repeat.
/* */
repeat :- repeat.
repeat , repeat
. repeat ,
. ,
, repeat. repeat
- , ( repeat). repeat repeat, , repeat repeat. ,
repeat . repeat
. .
, repeat , .
repeat
. ( 4.6), , , . stop, .
4.6
_______________________________________________________________
/* :
*/
/* : -, */
/*
*/
predicates
write_message
repeat
do_echo
check(name)
goal
write_message,
do_echo.
clauses
repeat.
repeat :- repeat.
write_message :nl, write(", , "), nl,
83
. ,
, .
-
. -,
:
do_two_things :repeat1,
< >,
< >,!,
repeat2,
< >,
< >,!.
repeat1.
repeat1 :- repeat1.
repeat2.
repeat2 :- repeat2.
< 1>.
< 2>.
repeat
- . repeat:
loop.
/* */
loop :- loop.
loop1.
loop1 :- loop1.
loop2.
loop2 :- loop2.
iterate.
iterate :- iterate.
/* */
recurse.
/* */
recurse :- recurse.
-
,
. .
*
85
4.8. ,
. ,
0 (). ( - -
readin(Number)
Number - ).
4.9. ,
. . ,
0 (). ( - -
readreal(Number)
Number - ). :
sum(X,Y,Z) :Z = X+Y.
X, Y, Z - .
4.5
, ,
-.
, .
4.5.1
, ,
. . , ,
, , . - . 5.
:
write_srting :- /* */
write(" - "),
nl,
write_string.
.
" - "
. - . ,
, write_string .
.
.
86
, ,
.
.
, .
, Miscellaneous settings ( ) Setup ().
,
- , .
.
.
, . write_string
: " ,
7. ".
-.
"" ( 4.7)
, .
4.7
________________________________________________________
/* :
*/
/* :
*/
/*
*/
domains
Char_data = char
predicates
write_prompt
read_a_character
goal
write_prompt,
read_a_character.
clauses
write_prompt :write(", ."), nl, nl,
write(" # "), nl, nl.
read_a_character :readchar(Char_data),
Char_data <> '#',
87
write(Char_data),
read_a_character.
_______________________________________________________
, : #, , - #,
. :
read_a_character :readchar(Char_data),
Char_data <> '#',
write(Char_data),
read_a_character.
, .
Char_data. , ,
#. , ,
read_a_character.
, #. ,
.
*
4.10. . Goal:
:
The early bird gets the worm.#
4.5.2 ()
.
, , .
, , .
:
< > :< >,
(1)
< >,
(2)
< >,
(3)
< >,
(4)
< >.
(5)
, , , .
. -
. . - .
, -
88
. - . ,
.
- . .
- ,
. ( ), .
, .
. . , ,
(), -.
,
1 7.
write_number(Number).
. , .. , Number < 8. Number 8,
.
. 1.
Next_Number. - write_number(Next_number). , , .
4.8
__________________________________________________________
/* :
*/
/* : */
/*
*/
/*
*/
domains
number = integer
predicates
write_number(number)
goal
write("Here are the numbers:"),
nl,nl,
write_number(1),
nl,nl,
write("
All done, bye!").
clauses
write_number(8).
write_number(Number) :89
Number < 8,
write("
", Number), nl,
Next_number = Number + 1,
write_number(Next_number).
_______________________________________________________
( 4.8)
:
write_number(8).
write_number(Number) :Number < 8,
write(Number), nl,
Next_Number = Number + 1,
write_number(Next_number).
write_number(1). write_number(8). 1 8, .
,
write_number(Number).
, Number 1.
8; . 1 8,
. , Number. Next_Number 2, Number 1. write_number
, 2 Next_Number.
, ,
, .
, .
Next_Number,
. , write_number(8). ,
Number , Number 8. , All done, bye! ( , !).
, .
*
4.11. , 53 62.
4.12. ,
1 7 .
. , .
90
4.9
_______________________________________________________________
/* : 1
*/
/* : */
/*
S(N) */
/*
S, N
*/
/* :
S(7) = 7+6+5+4+3+2+1 = 28
*/
/* :
.
*/
/*
*/
domains
number, sum = integer
predicates
sum_series(number, sum)
goal
sum_series(7,Sum),
write(" :"),nl,nl,
write(" S(7) = ", Sum), nl.
clauses
sum_series(1,1).
/* */
sum_series(Number,Sum) :Number > 0,
Next_number = Number - 1,
sum_series(Next_number, Partial_Sum),
Sum = Number + Partial_Sum.
____________________________________________________________
1 ( 4.9)
1 7:
S(7) = 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
S(7) = 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28
:
1
+2
___
3
+3
___
6
...
:
sum_series(1,1).
/* */
sum_series(Number,Sum) :91
Number > 0,
Next_number = Number - 1,
sum_series(Next_number, Partial_Sum),
Sum = Number + Partial_Sum.
. , - Sum Partial_Sum ( ) . , Partial_Sum
.
1
sum_series(7,Sum).
sum_series(1,1). . sum_series(Number,Sum).
Number 7. Number, 7,
0, .. . 7 0, , .
Next_number 6,
.. Number - 1.
sum_series(6,Partial_Sum).
Sum, Partial_Sum.
, Sum .
sum_series(1,1) sum_series(6,Partial_Sum). , .
sum_series(Number,Sum), Number 6.
,
sum_series(1,Partial_Sum). sum_series(1,1), Partial_Sum 1.
Sum
1. , Next_number
0 (1 - 1). Number 0.
, ""
Sum.
Partial_Sum , Number . Sum, 1, 3, 6, 10, 15, 21 28.
Sum 28.
*
92
4.13. 1 , :
S(15) = 1 + 3 + 5 + . . . + 15
4.14.
1, .
4.10
_______________________________________________________
/* : 2
/* :
/*
S,
/*
S(N), N
/* :
S(7) = 7+6+5+4+3+2+1 = 28
*/
*/
*/
*/
*/
domains
number, sum = integer
predicates
sum_series(number, sum)
goal
sum_series(7,Sum),
write(" :"),nl,nl,
write(" S(7) = ", Sum), nl.
clauses
sum_series(1,1) :- !.
/* */
sum_series(Number,Sum) :Next_number = Number - 1, s
um_series(Next_number,
Partial_Sum),
Sum = Number + Partial_sum.
______________________________________________________
2 ( 4.10) 1.
Number > 0 sum_series(1,1) :- !.
sum_series(1,1).
2:
1
sum_series(1,1).
/* */
sum_series(Number,Sum) :Number > 0,
Next_number = Number - 1,
sum_series(Next_number, Partial_Sum),
93
94
( 4.11)
. ( N N!.
). N! 1 N:
N! = N * (N-1) * (N-2) * ... 2 * 1
:
1! = 1
2! = 2 * 1 = 2
3! = 3 * 2 * 1 = 6
4! = 4 * 3 * 2 * 1 = 24
5! = 5 * 4 * 3 * 2 * 1 = 120
6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
7! = 7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
.
.
.
.
, . :
factorial(1,1) :- !.
factorial(Number,Result) :Next_number = Number -1,
facto-rial(Next_number,
Partial_factorial),
Result = Num-ber*Partial_factorial.
7! = 5040.
*
4.17. , 10. 10 3 628 800. : .
, .
, -
32 767.
4.6
:
(), (),
(),
().
95
- fail -.
.
-
(!), -, - , - . , .
, - . . , .
,
. , .
5.
5.1
. 3 . , (). -
, . - , . , (
), ( ).
- .
:
* ;
* ;
* ;
* ;
* .
, ( ), , ; . ,
, , -.
5.2 -
. , , , .
96
; ,
, .
.
- , . ,
. , .
([]),
.
:
[1,2,3,6,9,3,4]
[3.2,4.6,1.1,2.64,100.2]
["YESTERDAY","TODAY","TOMORROW"]
. - , - , . .
. ASCII .
5.2.1
. ,
. - , . , - , - ,
- , - . -
["JOHN WALKER",3.50,45.50]
, .
.
.
["MADONNA","AND","CHILD"] 3.
[4.50,3.50,6.25,2.9,100.15] 5.
:
["summer"]
[]
, , .
: (1) - , (2) . , .
- . ,
, ,
" ".
. ,
, , , .
97
[4.50,3.50,6.25,2.9,100.15]
, 4.50, -
[3.50,6.25,2.9,100.15]
, . - 3.50, -
[6.25,2.9,100.15]
. 5.1 .
5.1.
[1,2,3,4,5]
1
[2,3,4,5]
[6.9,4.3,8.4,1.2]
6.9
[4.3,8.4,1.2]
[cat, dog, horse]
cat
[dog, horse]
['S', 'K', 'Y']
'S'
['K','Y']
["PIG"]
"PIG"
[]
[]
5.2.2
-.
. .
- . :
number([66, 84, 12, 32]).
number .
66, - [84,12,32].
,
32.
, 4 ,
, . ,
. .
-.
, number, .
. 66. , . 84, . 98
12, . 32, .
, ,
. .
, , 84. , 32.
,
.
-
. -
, . .
*
5.1.
games([football,soccer,tennis,baseball])
) . ;
) .
?
5.2. ,
" " ( ).
?
5.3. , .
5.4. - :
[63,29,24,27,86]
[63,24,29,27,86]
.
5.5. ?
score(["Kennedy High School",6,3,8,9,6.2])
5.6.
symbols(["*","+","-","?","#","&"])
, ?
5.3
,
. :
num([1,2,3,6,9,3,4])
realnum([3.2,4.6,1.1,2.64,100.2])
time(["YESTERDAY","TODAY","TOMORROW"])
99
domains
bird_list = bird_name *
bird_name = symbol
number_list = number *
number = integer
predicates
birds(bird_list)
score(number_list)
clauses
birds(["sparrow",
"robin",
"mockingbird",
"thunderbird",
"bald eagle"]).
score([56,87,63,89,91,62,85]).
/*****
*****/
____________________________________________________________
:
birds(All).
birds([_,_,_,B,_]).
birds([B1,B2,_,_,_]).
score(All).
score([F,S,T,_,_,_,_]).
, . , All
. ,
.
, birds([_,_,_,B,_]),
. , , , . B thunderbird.
. B=thunderbird.
, birds([B1,B2,_,_,_]),
. B1=sparrow,
B2=robin, . . .
, . score(All) All
7 , :
All=[56,87,63,89,91,62,85].
101
- score([S1,_,_,S4,_,S6,_]).
S1=56, S4=89, S6=62. ,
.
*
5.7.
birds(bird_list).
5.8.
score(number_list).
5.9. "" :
birds([S,R,M,T,B]).
,
birds(All)?
5.4
""
.
birds(All) All
. , birds([_,_,_,B,_])
. , ,
, birds. birds([B1,B2,B3]),
.
-, ,
.
, , .
.
[4, 9, 5, 3]. 4, - [9,5,3].
9, [5,3]. 5
[3]. , [3] - 3 , . ,
-.
(|):
[Head|Tail].
Head , Tail . (
- .)
102
,
Tail
print_list:
print_list(Tail)
, Tail [9,5,3].
,
. Head 9,
. [5,3].
, Head 3, Tail .
print_list(Tail) Tail
print_list([])
, , ,
print_list. print_list ,
.
print_list(["cat","dog","horse","cow"]).
Head cat, cat
, Tail ["dog","horse","cow"].
. , Head , cow, Tail .
print_list[]
, .
,
, .
*
5.10. ["Boston","Philadelphia","Seattle","Chicago"]
)
;
) . .
, .
5.5.
, , , ,
, . .
104
5.5.1
.
( ) . ,
. . , -, , , .
, :
find_it(3 ,[1,2,3,4,5]).
, 3, . -
[1,2,3,4,5].
.
.
"-", , , .
.
find_it(Head,[Head|_]).
. , . , , , .
,
. , . ,
. , ,
, .
, , ,
.
, , :
find_it(Head, [Head|_].
find_it(Head, [_,Tail]) :find_it(Head, Tail).
105
find_it(Head,[Head|_]) , ,
find_it.
find_it - find_it([Head,[_,Rest]).
,
. ,
; , find_it(Head,[Head,_]).
( !), - .
find_it(Head,Rest) - .
Rest find_it(Head, [Head|_]). ,
, .
"" ( 5.3) . find_it
, , .
____________________________________________________________
5.3
/* :
: PROG0503.PRO */
/* : . */
domains
number_list = number *
number = integer
member_list = member *
member = symbol
predicates
find_it(number, number_list)
find_it(member, member_list)
clauses
find_it(Head, [Head|_]).
find_it(Head, [_|Tail]) :find_it(Head, Tail).
/*****
*****/
____________________________________________________________
find_it(3,[1,2,3,4,5])
, 1, , 3. 1 3 106
. ( ), 2,
. ,
, 3 - . True, , 3 .
find_it(1,[2,3,4,5]).
, 1 .
find_it("Alice",["Diana","Peter","Paul","Mary","Alice"]).
, Alice.
find_it("Toledo",["Cleveland","Dayton","Chardon",
"Youngstown","Cincinnati"]).
, .
*
5.11. :
find_it(44,[11,22,33,44,11,22,33,44,11,22,33,44,55]).
?
5.5.2
. , ,
. , .
split, :
split(Middle,L,L1,L2).
iddle , L - , L1
L2 - , L. Middle,
L1; , L2.
, iddle
40, L [30,50,20, 25,65,95],
L1 L2 .
split(40,[30,50,20,25,65,95],L1,L2).
,
, 40,
L1, 40 - L2.
: , Middle.
, L1, - L2.
107
108
*
5.12. " "
)
split(12,[96,32,8,16,55,12],L1,L2).
L1 L2 ?
) .
5.5.3
. . ,
,
,
. , , ,
-,
.
, L1 L2, . [1,2,3] [4,5].
. , L2 L1 L3, L1 L2.
:
1. L3 .
2. L1 L3,
L3 [1,2,3].
3. L2 L3,
[1,2,3,4,5].
:
append([],L,L).
append([N|L1],L2,[N|L3]) :append(L1,L2,L3).
, ,
L1=[1,2,3] L2=[4,5].
- :
append([],L,L).
,
append . append
append([1,2,3],[4,5],_).
, , . -, append, , .
109
. , , .
append ,
.
. append,
:
append([],[4,5],_).
append([],[4,5],[4,5]).
-
, - :
append([N|L1], L2, [N|L3]) :append(L1,L2,L3).
. ,
( !),
N [N|L1] [N|L3].
:
append([],[4,5],[4,5])
append([3],[4,5],[3,4,5])
append([2,3],[4,5],[2,3,4,5])
append([1,2,3],[4,5],[1,2,3,4,5])
,
. L3
- [1,2,3,4,5].
" " ( 5.5) . n_list .
append(n_list,n_list,n_list)
clauses append.
, ,
:
append([1,2,3],[4,5],L).
_____________________________________________________________
5.5
/* :
*/
/* : .
*/
domains
n_list = integer *
predicates
110
append(n_list,n_list,n_list)
clauses
append([],L,L).
append([N|L1], L2, [N|L3]) :append(L1,L2,L3).
/*****
*****/
____________________________________________________________
" "
. , -
,
. . .
. , .
*
5.13. " "
append([9,15,3,60,55],[15,2,21],L).
?
5.5.4
. . ,
.
, , , , .
,
. - , .
. , , :
[51,23,84,17,11]
-
. , , :
[11,17,23,51,84]
- , . , - .
111
: , .
. ,
.
,
. .
, ,
-. , .
[4,7,3,9], . [3,4,7,9], .
,
.
insert_sort(source_list,target_list)
[4,7,3,9]
insert_sort([4,7,3,9],S).
S.
, - , , . , . ,
, . , , .
, ,
:
insert_sort([],[]).
insert_sort([X|Tail],Sorted_list) :insert_sort(Tail,Sorted_Tail),
in-sert(X,Sorted_Tail,Sorted_list).
insert(X,[Y|Sorted_list],[Y|Sorted_list1]) :asc_order(X,Y), !,
insert(X,Sorted_list,Sorted_list1).
insert(X,Sorted_list,[X|Sorted_list]).
asc_order(X,Y) :- X>Y.
[4,7,3,9].
-
, .
insert_sort([4,7,3,9],_).
112
insert_sort
insert_sort([],[]).
. insert_sort
. - . .
, ,
:
insert_sort([X|Tail],Sorted_list) : - insert_sort(Tail, Sorted_Tail).
-
, insrt_sort,
,
. . insert_sort
,
insert_sort([],[]).
,
insert_sort, -
insert_sort - insert. , 9, insert
insert(9,[],[9]).
insert_sort - insert ( ),
insert_sort. , 3, insert,
asc_order(X,Y) :- X>Y.
3, Y - 9,
asc_order(3,9) :- 3>9.
(3 , 9),
insert.
insert 3 9:
insert(3,[9],[3,9]).
insert_sort,
insert_sort([3,9],[3,9]).
, 7. insert
insert(7,[3,9],_).
7 3,
asc_order(7,3):- 7>3.
, 3 , insert
, - [9] :
113
insert(7,[9],_).
asc_order(7,9):- 7>9.
, insert (),
insert, insert_sort.
7 3 9.
insert(7,[3,9],[3,7,9]).
insert_sort 4. insert
insert(4,[3,7,9],_).
:
asc_order(4,3) :- 4>3.
, ,
insert(4,[7,9],_).
asc_order(4,7) :- 4>7.
. , 4
3 7 :
insert(4,[3,7,9],[3,4,7,9]).
insert_sort([4,7,3,9],[3,4,7,9]).
, insert_sort
. [3,4,7,9], .
" " ( 5.6) . .
____________________________________________________________
5.6
/* : Co
*/
/* : .
*/
/*
*/
domains
number = integer
list = number *
predicates
insert_sort(list,list)
insert(number,list,list)
asc_order(number,number)
clauses
insert_sort([],[]).
insert_sort([X|Tail],Sorted_list) :insert_sort(Tail,Sorted_Tail),
insert(X,Sorted_Tail,Sorted_list).
114
insert_sort([7,6,5,4,3,2,1],S).
*
5.15. " ".
insert_sort([53,11,93,77,11],S).
?
5.16. , .
. :
insert_sort([1,2,3,4,5,6,7],S).
?
5.6
, ,
. - ,
. findall.
, .
findall
:
findall(Variable_name,Predicate_expression,List_name).
Variable_name
Predicate_expression, List_name
. ,
domains.
football(name,points)
5 :
ootball("Ohio State",116.0). football("Michigan",121.0).
football("Michigan State",114.0). football("Purdue",99.0).
football("UCLA",122.0).
115
, .
, .
findall :
findall(Points,football(_,Points),Point_list)
Poits , Point_list - , , Points, , real.
. findall football,
. Points (116), ,
Point_list. Points . findall
Point_list
[116.0,121.0,114.0,99.0,122.0]
sum_list([],0,0).
sum_list([H|T], Sum, Number) :sum_list(T,Sum1,Number1),
Sum = H + Sum1,
Number = Number1 + 1.
sum . 4.
Point_list
sum_list(Point_list,Sum,Number).
-
sum_list([H|T],Sum,Number). Point_list [H|T], Sum Number .
, Point_list
; . -
sum_list([],0,0).
Sum Number ,
. sum_list, , , ;
Number .
sum_list:
sum_list([122],122,1)
sum_list([99,122],221,2)
sum_list([114,99,122],335,3)
sum_list([121,114,99,122],456,4)
sum_list([116,121,114,99,122],572,5)
Sum Number 572 5.
116
:
Average = Sum / Number
Average Sum_list Sum Number.
Average Sum Number, . .
114.4.
"" ( 5.7) findall .
____________________________________________________________
5.7
/* :
*/
/* :
*/
/*
findall . */
domains
name = string
points = real
list = points *
predicates
football(name,points)
sum_list(list,points,integer)
report_average_football_score
goal
report_average_football_score.
clauses
/* ( ) */
football("Ohio State",116.0).
foot-ball("Michigan",121.0).
football("Michigan State",114.0).
football("Purdue",99.0).
football("UCLA",122.0).
report_average_football_score:findall(Points,football(_,Points),Point_list),
sum_list(Point_list,Sum,Number),
Average = Sum / Number,
write("College Football Power Rating:"),
nl,
write(" Average Points = ",Average).
sum_list([],0,0).
sum_list([H|T], Sum, Number) :sum_list(T,Sum1,Number1),
Sum = H + Sum1,
117
Number = Number1 + 1.
/*****
*****/
_____________________________________________________________
.
report_average_football_score
, findall, sum_list,
Average, , .
,
findall , . , sum_list, Average. Average 114.4, write. , , .
*
5.17. , "" .
. ?
5.7.
-, .
. , , . findall
.
, , . .
, . .
-. .
, , 118
. , , , ,
.
119