( запрос_перем( Перем),

                assertz( сказано( Цель, правда, Инд) );

                                                                  % Запись решения

                копия( Цель, Копия),            % Копирование цели

                ответпольз( Цель, Копия, Трасса, Ответ, Инд1) ).

                                                                  % Есть еще решения?

        обработать( нет, Цель, _, _, _, ложь, N) :-

                копия( Цель, Копия),

                сказано( Копия, правда, _),  !,

                                        % 'нет' означает, больше нет решений

                assertz( конец_ответов( Цель) ),

                                        % Отметить конец ответов

                fail;

                след_индекс( Инд),

                                        % Следующий свободный индекс для 'сказано'

                assertz( сказано( Цель, ложь, Инд) ).

                                        % 'нет' означает нет ни одного решения

        формат( Пер, Имя, Имя, Перем, [Пер/Имя | Перем]) :-

                var( Пер),  !.

        формат( Атом, Имя, Атом, Перем, Перем) :-

                atomic( Атом),  !,

                atomic( Имя).

        формат( Цель, Форм, Вопрос, Перем0, Перем) :-

                Цель =.. [Функтор | Apг1],

                Форм =.. [Функтор | Форм1],

                формвсе( Apг1, Форм1, Арг2, Перем0, Перем),

                Вопрос =.. [Функтор | Арг2].

        формвсе( [ ], [ ], [ ], Перем, Перем).

        формвсе( [Х | СпХ], [Ф | СпФ], [В | СпВ], Перем0, Перем) :-

                формвсе( СпХ, СпФ, СпВ, Перем0, Перем1),

                формат( X, Ф, В, Перем1, Перем).

        запрос_перем( [ ]).

        запрос_перем( [Переменная/Имя | Переменные]) :-

                nl, write( Имя), write( '='),

                read( Переменная),

                запрос_перем( Переменные).

        выд_трассу( [ ]) :-

                nl, write( 'Это был ваш вопрос'), nl.

        выд_трассу( [Цель по Прав | Трасса] ) :-

                nl, write( 'Чтобы проверить по' ),

                write( Прав), write( ', что'),

                write( Цель),

                выд_трассу( Трасса).

        конкретный( Терм) :-

                нумпер( Терм, 0, 0).

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату