top-shop.ru
PREMIUM 'Skintherapy' Концентрат
Интерпретация Пролог - программы в среде GNU Prolog

Быстрый старт: Работа в режиме интерпретации среды GNU Prolog

Основной режим изучения Пролога - интерпретация программ из файла, или непосредственно с консоли.

Быстрый старт

Удобно рассматривать Пролог - программу, как базу данных, часть информации в которой хранится в "неявном виде", т.е. может быть извлечена с помощью правил. Второй вариант - представить такую программу как выполнение некоторого перебора вариантов (факты - область исходного перебора, правила - способ перехода к области результатов).

Первая моя программа будет содержать два факта: Мэри и Джон любят яблоки. Запускаем gprolog.exe (как Вам удобнее - через Иконку на рабочем столе или напрямую - из каталога). Видим "шапку" и приглашени к вводу:

GNU Prolog 1.2.16
By Daniel Diaz
Copyright (C) 1999-2002 Daniel Diaz
| ?-
  1. Вариант: Набрать все с клавиатуры.
    GNU Prolog 1.2.16
    By Daniel Diaz
    Copyright (C) 1999-2002 Daniel Diaz
    | ?- [user].
    compiling user for byte code...
    like(john,apples).
    like(mary,apples).
    
    user compiled, 3 lines read - 347 bytes written, 23974 ms
    
    (691 ms) yes
    | ?- 
    
    Две основные хитрости: [user]. и ввод, начнет "запись" программы с клавиатуры, а Ctrl + D с новой строки - закончит ее запись и начнет байт - компиляцию "Пользовательского ввода".

    Текст программы теперь в памяти Интерпретатора - вы можете его вывести с помощью директивы listing. Если Вы хотите увидеть только часть программы (предикатов), то в скобках можно уточнить listing(like). - не забывайте точку в конце директивы.

    Теперь Вы можете задавать Вашей программе вопросы (Кто любит яблоки):
    | ?- like(X,apples).
    
    X = mary ? ;
    
    X = john
    
    yes
    | ?-
    После первого найденного решения, программа останавливается и выводит ? теперь Вы можете набрать ; - и т. д. Просто ввод - прервать поиск решений.

    В режиме редактирования строки Вы можете пользоваться управляющими клавишами и спец. комбинациями Ctrl + P - предыдущая строка в истории, Ctrl + N - следующая, весь список кодов Вы можете получить комбинацией клавиш Esc + ? (Esc - удерживайте)

    Вы можете сохранить набранную Вами Пролог-программу в файл. С помощью следующей, довольно сложной директивы:

    open('Filename.pl',write,Target),
       current_output(Old),
       add_stream_mirror(Old,Target),
       listing,
       remove_stream_mirror(Old,Target),
       close(Target).
    
    Самое время напомнить о возможности использования Cut & Paste в окне интерпретатора Пролога (пункт меню Edit).

    Возможности редактирования программы, хранящейся в потоке [user] ограничены - вы можете еще раз открыть поток, и добавить правила (конструкции вида: children(X,Y) :- parent(Y,X).). Но попытка добавить факт, приведет к удалению фактов предыдущей программы (с такими же именами), при этом правила и факты с другими именами сохранятся!
  2. Вариант: Загрузить Пролог программу из файла. Этот вариант предусматривает загрузку исходного текста прологовской программы, с последующей ее компиляцией в байт - код внутри интерпретатора.
    GNU Prolog 1.2.16
    By Daniel Diaz
    Copyright (C) 1999-2002 Daniel Diaz
    | ?- ['1_1.pl'].
    compiling E:\Prolog\Program\1_1.pl for byte code...
    E:\Prolog\Program\1_1.pl compiled, 8 lines read - 907 bytes written, 10 ms
    
    (10 ms) yes
    | ?-
    или так:
    GNU Prolog 1.2.16
    By Daniel Diaz
    Copyright (C) 1999-2002 Daniel Diaz
    | ?- ['1_1'].
    compiling E:\Prolog\Program\1_1.pl for byte code...
    E:\Prolog\Program\1_1.pl compiled, 8 lines read - 907 bytes written, 10 ms
    
    (10 ms) yes
    | ?- 
    еще так:
    | ?- consult('1_1.pl').
    compiling E:\Prolog\Program\1_1.pl for byte code...
    E:\Prolog\Program\1_1.pl compiled, 8 lines read - 907 bytes written, 10 ms
    
    yes
    | ?-
  3. Вариант: Загрузить байт - Пролог программу из файла. В отличии от приведенного выше варианта, здесь идет речь о загрузке Пролог программы из файла с байт - кодом. Для получения такового следует использовать компилятор Пролога gplc.exe.
    gplc.exe -w 1_1.pl
    В случае успешной байт - компиляции у нас появляется файлик 1_1.wbc. Проверяем:
    GNU Prolog 1.2.16
    By Daniel Diaz
    Copyright (C) 1999-2002 Daniel Diaz
    | ?- load('1_1.wbc').
    
    yes
    | ?- listing.
    
    children(A, B) :-
     parent(B, A).
    
    parent(pam, bob).
    parent(tom, bob).
    parent(tom, liz).
    parent(bob, enn).
    parent(bob, pat).
    parent(pam, jim).
    
    (10 ms) yes
    | ?- 
  4. Вариант: Пакетный режим интерпретатора. При запуске интерпретатора можно указать набор из трех аргументов коммандной строки:
    gprolog.exe --init-goal "write(before), nl" --entry-goal "write(inside), nl" --query-goal "append([a,b],[c,d],X)"
    before
    GNU Prolog 1.2.16
    By Daniel Diaz
    Copyright (C) 1999-2002 Daniel Diaz
    inside
    | ?- append([a,b],[c,d],X).
    
    X = [a,b,c,d]
    
    yes
    | ?- 
    Эта технология позволяет запускать интерпретатор Пролога из BAT файлов, с загрузкой нужной программы.

Напоследок - о том, как выйти из интерпретатора Пролога с помощью предиката. Это можно сделать набрав halt.
Блог изучающего Пролог

содержание