.
DONALD + GERALD
ROBERT
D, , N .. , . ,
7.
, , . :
; |
sum N1, 2
N1, N2 N . sum(N1, N2, ) , , N1 + ' = N.
, N1, N2 . . , 225 [2,2,5]. , - . :
[0,0,, A, L, D] + [G,E,R,A,L,D]
] |
= [R,0, , , R, ] Number! - ID;:,Dj2, Number2 [D^ifDzz,
[D31,D-< |
Number3
D, , N .., . sum , Prolog , :
1- sura! [D,0,N,A,L,D], [G, E, R, A, L, DJ, [R, , , E, R, T] ).
s . , , . , , , ; . , , .. , . , , N1, N2 , (. 7.1):
, ;
, ;
, ;
, .
f- \^ |
!
Number! | ................ □.......................... |
* Number2 | -D3l............ |
= Nitmber3 | ■D...................................................... |
. 7,1. ; i HUSMU;D3i = {Cl + D:i + £ mod 10. = <1 + * Oil) div 10
|
|
I- Prolog
■ sum ; , , suml. suml , :
suml(HI, N, C1, , Digitsl, Digits)
N1, N2 N , , sum, C1 ( N1 N2) ( N1 N2). .
?- suml[ [,], [6,], [U,S], 1, 1, [1,3,4,7,8,9], Digits).
S = 8
= 3
S = T
U ^~
Digits = [1,9]
: 1+- *- 1
Ft 3 6 3
. 7.1, 1 0, N1, N2 N sum. , Digitsl N1, N2 , a Digits , . , sum, , sum suml :
suiat HI, N2, ):-suml (Ml, N2, N, 0, 0, [0,1, 2, 3, 4, 5, 6,7, 8, ], _).
suml. , . , , , . , ; " " .
suml , .
1. , : suml[ [], [], ], , , Digs, Digs).
2. - () , :
[Dl i N1], [D2 i 2] [D I H]
.
) , N1, N2 , suml;
(2)
, Digs2.
) (Dl, D2 3) (2)
, . 7.1,
>92% ■ tl, \ ~& 1 ^-. ■.-- -^
.
digit sum.
7.
-
Prolog , , :
*1([Dl I HI], [D2 | N2], [D [ ], 1, , Digsl, Digs):-small 1, N2, N, Cl, C2, Digsl, Digs2), digitsum(Dl, D2, C2, D, C, Digs2, Digs).
Prolog digitsum. , nonvar. Dl, D2 D . , Digs2. , Dl, D2 D , , , . .. , ( ). , . del_var(Item, List, List):-
|
|
nonvar i Item),!. % Item
del_var(Item, [Item [ List], List). i.
del_var< Item, [A | List), [A! List!]):-
del_var{ Item, List, Listl. % Item
7.1, , Prolog , DOKALD, GERALD ROBERT, : ?- puzzieKNl, N2, ), sum! si, N2, ).
7.1.
sum [\, 2, Nj: - suml (Hi, N2, N, , , [0,1,2,3,4,5,6,7, |
,
, , I
■9], _)
suml [ [], [], [], , , Digits, Digits).
suml[ [D1IN1], [D2IN2],;0|:,1, , Digsl, Digs) suml(Ml, N2, H, Cl, C2, Digsl, Digs2), digitsumt Dl, D2, C2, D, C, Digs2, Digs).
: -
digitsuffii Dl, D2, Cl, D, C, Digsl, Digs) |
del_var(Dl, Digsl, Digs2) del_var(D2, Digs2, Digs3), del_var(D, Digs3, Digs),
S is Dl + D2 + Cl,
D is S mod 1,
is S // 10.
: -
% Dl].
* D2
% D
*
del_var(A, L, Li:-
nonvar(A),!. del_var[ A, [A|L], L).
% %
del_var[ A, [B|L], [B|L1]> del var(A, L, LI).
: -
*
I. Prolog
ouzzlel[ [D,0,N,A,L, D], [G,E,R,A,L,D], [R,0,B,E,R,T])
puzzle2([0,S,E,N,D],
[0,M,O,R,E], [M, O, NrE,Y] ).
, (, , D 5). , , Prolog suml :
?- sumlC!S,0,H,ft,L,5], [G,E,R, A,L, 5], [R,0,B,E,R,T3,
, 0, [0, 1,2,3, 4, 6,7,8,9], _).
, . , .
7.1. simplify
, ( ). ,
, .
.
?- simpli£y(1 + 1 + , ).
= + 2
?- simplify(l+a+4+2+b+c, EL
£ = + + + 1
?- simplify) 3 + . + ., !.
= 2* + 3
7.2.
add_to_tail (Item, List}
. , , , . List . , . , , a, b .
List = [, , I Tail]
Tail .
add_to_taii(d, List)
:
Tail = Id | HswTail] v. List = [a, b, c, d I HewTail]
|
|
, , , . .
7,
7.2. : =.., functor, arg name
: functor, arg "=..". =.., "" (univ).
Term =.. L
, L - , Term, . :
?- f (, ) =.. L.
L = [f, a, b]
?- -.. [rectangle, 3, 5].
= rectangle 3, 5)
?- Z.. [, X, f(X,Y)].
Z = (X, f<X,Y])
( ) .
, . , , , .. , , , , .
square! Side)
triangle; Sidel, Side2, Side3)
circle! R)
. : enlarge! Fig, Factor, Figl)
Fig Figl ( ), Figl Fig, Factor. , Fig ( , ), Factor, enlarge.
enlarge! square (A), F, square(All):-
Al is F*A. enlarge! gitcle<R), F, circle(Rl)):-
RI is F*R1, enlarge! rectangle (A, B), F, rectangle [Al, Bl)):-
Al is F*A, Bl is F*B.
, , . , , . , , , : , , .
() , , .
I. Prolog
Prolog , , . "=..". enlarge { ) :
enlarge! Fig, , Figl):-Fig =.. [Type | Parameters], multiplylist (Parameters, F, Parameters!), Figl =.. [Type I Parametersl].
multiplylist([], _, []). multiplylist ([X | L], F, [XI | LI]):-XI is F*X, multiplylist! L, F, Ll).
=.." , . , . substitute (Subterm, Term, Subterml, Terml)
|
|
: Sub-term Term Subterml, Terml, , .
?- substitute! tliiix), 2*sin<x)*f(smCO), t, F). F= 2*t*f(
Subterm Term
Terra, Subterm.
,
?- substitute (a + b, f[ a, A+B), v, F).
:
F = f (a, v) - f (a, v + v)
= , - +
= = +
substitute : Subterm = Term, Terml = Subterml;
, Tem m 'atomic'
Terml = Tem ( ),
Term.
Prolog, 7.2.
7.2.
% substitute! Subterm, Term, Subterml, Terml).-
I Subterm Term
% Subterml, Terml
I 1.
substitute{ Term, Term, Terml, Terml):-!.
% 2. , Term 'atomic'
substitute! _, Term, _, Term):-
7.
atomic (Term),!.
% 3.
substitute! Sub, Term, Sufcl, Terml):-
Term =.. [FiArgsl, %
snbstlist! Sub, Args, £ubir argsl!, I
Terml =.. [Flargsl].
substlist; _, [], _, []].
substlistt Sato, [Term r Terms], Subl, [Terral|Terms!]):-
, , "=.."'. , , , . , , :
obtain! Functor;,
compute (Arglist!,
Goal -., -Functor I Arglist],
Goal
obtain compute , . "=.." , Goal.
Prolog , , . , , . , call, . :
Goal =.. [Functor I arglist], calif Goal)
. , , "=..". , : functor . : functor I Terra, F, )
, F - Term N - F. ,
arg(, Term, A)
, N- Terra, , " , 1. :; - functort t(f(X), X, t), Tun, Arityi
Fun = t Arity = 3
?- argl 2, f: X, t (a), t (b)), Y).
158 I. Prolog
Y = t(a)
1- functor) D, date, 3),
arg(1, D, 29),
arg( 2, D, June), arg(3, D, 1582). D - date (29, June, 1982)
functor. functor (D, date, 3} , date. , , Prolog, : D = datet _5, _6, _7)
|
|
arc
, / (. 6). . name (A, L) , L ASCII .
7.3. ground (Terra) , , Term .
7.4. substitute, , " " , . , , , .
7- substitute; a+b, f+), new, KewTerra).
-
=
NewTerm = f(new);
- a+b
- a+b
NewTerm = f(new + new)
.
7.5.
subsunesi Terml, Ter2)
, , Terml , 2. , .
?- subsumes (X, }.
yss
'?- subsumes g(X), g[t(Y))).
yes
?- subsumesi f(x,x), £(a,b)).