
III. Вопрос 20.3
Применение:
• Обобщённые вычисления, в обход требований синтаксиса.
1 enlarge( Fig, F, Figl) :−
2 Fig =.. [Type | Parameters],
3 multiplylist( Parameters, F, Parameters1 ) ,
4 Figl =.. [Type | Parametersl ].
5
6 multiplylist( [], _, [] ).
7 multiplylist( [X | L], F, [X1 | L1]) :−
8 X1 is F ∗ X, multiplylist( L, F, L1 ).
• Символьные вычисления, в обход требований синтаксиса.
1 % substitute ( Subterm, Term, Subterml, Terml) :
2 % если все вхождения субтерма Subterm
3 % в терме Term будут заменены
4 % субтермом Subterml, то будет получен терм Terml
5
6 % Случай 1. Замена всего терма
7 substitute{ Term, Term, Term1, Term1) :− !.
8
9 % Случай 2. Ничего не требует замены,
10 % если Term относится к типу ’atomic’
11 substitute( _, Term, _, Term) :−
12 atomic(Term) , !.
13
14 % Случай 3. Выполнение замены Б параметрах
15 substitute( Sub, Term, Sub1, Term1) :−
16 Term =.. [F|Args], % Получить параметры
17 substlist( Sub, Args, Sub1 Args1), % Выполнить в них замену
18 Terml =.. [F|Args1].
19
20 substlist( _, [], _, []) .
21 substlist( Sub, [Term|Terms], Subl, [Terml|Terms1]) :−
22 Substitute( Sub, Term, Sub1, Term1),
23 Substlist( Sub, Terms, Sub1, Terms1).
24
25 ?− substitute( sin(x), 2∗sin(x)∗f(sin(x)), t, F).
26 F = 2∗t∗f(t)
44