.


:




:

































 

 

 

 


nonvar




.

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)).






:


: 2015-10-01; !; : 564 |


:

:

80% - .
==> ...

793 - | 737 -


© 2015-2024 lektsii.org - -

: 0.089 .