. , "!".
:
1) ;
2) ;
3) .
.
1. . , ( 1, 1, 2, 3, 5, 8,..., , ).
118
fib (0,_,1).
fib (1,1,1).
fib (N,G,H): - fib (N-l,F,G), H is F+G.
?- fib (0_,F).
F = 1, . fib(-l,FO,Fl), , , fib(-2,..,..) , .. .
, , .
119
fib (0,_,1): -!.
fib (1,1,1): -!.
fib (N,G,H): - fib (N-l,F,G), H is F+G.
fib
?- fib(0_,F).
F=l. .
2. .
max(X, Y, ).
=, X>=Y, M=Y, X<Y. :
max(X,Y,X):-X>=Y.
max(X, Y, Y): - X<Y.
. , :
X>=Y = M=Y.
:
max(X,Y,X):-X>=Y,!
max(X, Y, Y).
3. .
120
.
D
: - , . (1)
: -D,!, . (2)
: -F, G, H. ()
?.
, (1) (2), (1) - (2). (2) (3). (3) , (2) : (2) , (1), . (2) : -D, ., (3) D.
, . fail.
|
|
fail . .
: .
121
oc(cpm).
(msdos).
(unix).
-:-(X), write(X), fail.
?--.
, . , . .
. , :
[,,,,].
, , , . , .
.
, [X | Y] - . Y - .
.
:
1) [] - :
2) [X | Y] - , Y - .
, .
1) , ;
2) , , ( ), ( ).
I: .
122
([], 0).
([|], N):- (, ), N is M+1.
?- ([, , ]), X).
: =3.
2: .
123
(X, [X | Y]).
(X, [A |Y ]): - (X,Y).
?- (4,(1,3,4,9]).
:.
: , .
3: .
:
) , [ ] , ;
) , [X|Y], Y ( [|]).
124
([ ], , ).
([XIY], , [X | ]):-(Y, , ).
? (L,[.R],(,,,,,]).
:
L=[,]. =[ ,]. L=[,,,]. R=[o].
append (- -).
(!).
125
append([ ], L, L).
append([A I B], C, [A | D]):- append(B, C, D).
?-append(X,Y,[1,2]).
:
X=[]
Y=[l,2]
X=[l]
Y=[2]
X=[l,2]
Y=[].
append([ ], 1,1):-!. , :
=[]
Y=[l,2].
4. .
126 , , , - - -.
|
|
126
(X. [X I Y], Y): -!.
(X. [Z I Y], [Z I W]): - (X, Y, W).
: , , .
, X. "!" .
:
(,[ ],[]).
(X, [X | Y], W):- (X, Y, W).
(X, [Z I Y], W):- (X, Y, W).
: , , , , , , .
5: .
127 , N X.
127
([X | Y], 1, X).
([W | Y], N, X):- N is M+l, (Y, M, X).
6: .
128
max ([X], X).
max ([X | Y], X):- (Y, W), X>W,!.
max ([X | Y], W):-max (Y, W).
: - , , , , .
7: .
- . , - . - , .
129
([X], [X]).
([X I Y], Z):- (Y, W), (W, [X], Z).
, .
Arity-Prolog , , , .