Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу БИБЛИОТЕКА ПО ПРОЛОГУ!!!
Ответ
 
Опции темы Опции просмотра
  (#16 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 07.07.2005, 16:21

Для изучающих Пролог в среде VIP6.2.
Запускать форумные примеры в среде VIP6.2 проще всего в консольном варианте. Вот краткая справка, как это делать:

1. Создайте проект с UI Strategy = Console
2. После компиляции откройте файл <имя_проекта.pro> и вставьте нужный код вот сюда:
Код:
run():-
        console::init(),
        <Ваш код>.
3. Опишите Ваши предикаты в разделе: class predicates.
4. Для ввода/вывода используйте упрощённое описание основных предикатов класса Console:
  • 1) console::classInfo(Name,Version) - возвращает имя и версию класса console (string,string).
    2) console::close() - закрыть окно.
    3) Title = console::getConsoleTitle() - возвращает имя окна (string).
    4) Width = console::getConsoleWidth() - возвращает ширину окна как максимальное число символов в строке.
    5) L = console::getLocation() - возвращает текущую позицию (колонка, ряд) курсора. Позиция - это структура: console::location(X,Y).
    Пример: console::location(X,Y) = console::getLocation()
    6) console::init() - инициализация консоли.
    7) console::isModeEcho() - истинен, если включён эховывод в окно.
    8 ) console::isModeLine() - истинен, если включён режим ввода строки только по <ВК>
    9) console::isModeProcessed() - истинен, если включён режим обработки символов (backspace, tab,
    bell, carriage return и linefeed) без помещения их в буфер.
    10 ) console::isModeWrap() - истинен, если включён режим переноса строки.
    11) console::nl - перевод в начало след. строки.
    12) Char = console::readChar() - чтение одного символа.
    13) String = console::readLine() - чтение строки.
    14) console::setConsoleTitle("Title") - установка имени окна.
    15) console::setLocation(console::location(X,Y)) - установка положения курсора для вывода очередного символа.
    16) console::setModeEcho(true/false) - установка/запрет режима эховывода.
    17) console::setModeLine(true/false) - установка/запрет режима ввода строки только по <ВК>.
    18 ) console::setModeProcessed(true/false) - установка/запрет режима обработки символов.
    19) console::isModeWrap(true/false) - установка/запрет режима переноса строки.
    20) console::write(...) - вывод.
    21) console::writef(...) - форматируемый вывод.
Вот фрагмент примера генерации списка длиной в треть символов ширины экрана, и вывод его на экран:
Код:
class  predicates 
    gen_list : (integer, integer_list) procedure (i,o).
   
clauses
    classInfo(className, classVersion).
    
    gen_list(0,[]):-!.
    gen_list(N,[N|L]):-gen_list(N-1,L).
    
    run():-
        console::init(),
        console::setConsoleTitle("My Title"),
        Width = console::getConsoleWidth(), 
        N = Width div 3,
        gen_list(N,List),
        console::write("Ширина окна = ",Width," символовn"),
        console::write("Список = ",List),
        console::setLocation(console::location(20,10)) ,
        console::write("Для завершения нажмите "Ввод"..."),
        _=console::readline().
Примечание:
1. В Vip6.2 поддерживаются списки стандартных доменов, см. пример:
Код:
gen_list : (integer, integer_list) procedure (i,o).
2. В Vip6.2 поддерживается функциональный стиль, см. пример:
Код:
gen_list(N,[N|L]):-gen_list(N-1,L).
Ответить с цитированием
  (#17 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 13.07.2005, 21:10

На основании рекомендаций Виктора Анатольевича (http://www.hardforum.ru/t60108) демонстрирую модифицированный пример консольного приложения. В данном примере используется директива open, что позволяет опускать явное упоминание имени класса console при вызове предикатов из этого класса. Исходник стал выглядеть более лаконично.
Для понимания сути изменений своё предыдущее сообщение не удаляю.
Код:
implement пример
    open core
    open console

constants
    className = "Пример №1".
    classVersion = "Версия 2.0".

class  predicates 
    gen_list : (integer, integer_list) procedure (i,o).
   
clauses
    classInfo(className, classVersion).
    
    gen_list(0,[]):-!.
    gen_list(N,[N|L]):-gen_list(N-1,L).
    
    run():-
        init(),
        setConsoleTitle("My Title"),
        Width = getConsoleWidth(), 
        gen_list(Width div 3,List),
        write("Ширина окна = ",Width," символовn"),
        write("Список = ",List),
        setLocation(location(20,10)) ,
        write("Для завершения нажмите "Ввод"..."),
        _ = readline().
       
end implement пример

goal
    mainExe::run(пример::run).
Примечание:
1. В Vip6.2 поддерживаются списки стандартных доменов, см. пример:
Код:
gen_list : (integer, integer_list) procedure (i,o).
2. В Vip6.2 поддерживается функциональный стиль, см. пример:
Код:
gen_list(N,[N|L]):-gen_list(N-1,L).
или
Код:
gen_list(Width div 3,List),
Ответить с цитированием
  (#18 (permalink)) Старый
kalk kalk вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию 26.08.2005, 05:34

Хотелось бы выразить особую благодарность особенно за первую буквицу ( почти азбука ). Ура создателям(троекратное).
Ответить с цитированием
  (#19 (permalink)) Старый
Ira Ira вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.11.2002
По умолчанию 21.09.2005, 19:57

Цитата:
Originally posted by Alison
[b]Где взять DjVu? Ссылка не работает
Плагин чтения формата DjVu для Internet Explorer можно скачать
с http://radioam.narod.ru/3/djvu/djvuplug.exe
Ответить с цитированием
  (#20 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 13.10.2005, 01:20

Преобразование цели из determ/nondeterm/multy в procedure (только для VIP6).
Подавляющее большинство форумных примеров написано для компиляторов от Турбо-Пролога до VIP5 включительно. Однако начиная с VIP6 был изменён режим детерминизма цели, которая теперь должна быть только procedure. Наверное по этой же причине в VIP6 была ликвидирована и волшебная кнопочка "G" для теста произвольного предиката (большая просьба к PDC вернуть волшебную кнопочку).
Поэтому, для запуска форумных примеров в консольном приложении VIP6 надо осуществить небольшое преобразование целевого предиката так, чтобы он стал procedure. Ниже приведены примеры трёх преобразований.

1. multi -> procedure Вот прога, в которой предикат старт() имеет режим детерминизма multi и поэтому прога не запускается:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) multi (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_). 
    старт("Нет").
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
Вот как можно преобразовать multy в procedure:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) procedure (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_),!. 
    старт("Нет").
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
2. determ -> procedure
Вот прога, в которой предикат старт() имеет режим детерминизма determ и поэтому прога не запускается:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) determ (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_),!. 
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
Вот как можно преобразовать determ в procedure:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) procedure (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_),!. 
    старт("Значение по умолчанию").
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
3. nondeterm -> procedure
Вот прога, в которой предикат старт() имеет режим детерминизма nondeterm и поэтому прога не запускается:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) procedure (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_). 
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
Вот как можно преобразовать nondeterm в procedure:
Код:
implement проба
    open core, console
class facts
   факт : (integer) nondeterm.
class predicates
    старт : (string) procedure (o).
clauses
    факт(1).  факт(2).  факт(3). 
    старт("Да"):- факт(_),!. 
    старт("Значение по умолчанию").
    run():-init(),
        старт(Я),
        write(Я),
        _=readchar().
end implement проба
goal  mainExe::run(проба::run).
Ответить с цитированием
Ads.
  (#21 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 973
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 02.11.2005, 14:07

Не знаю известно ли посетителям. Раньше была ссылка на учебный курс по Прологу. Теперь мне сообщили, что появилась книжка
http://www.intuit.ru/shop/books/series/it-...html?id=2493382
Ответить с цитированием
  (#22 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 02.11.2005, 15:57

VictorY, а Вы ее читали? У Вас есть о ней собственное мнение?
Ответить с цитированием
  (#23 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 973
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 02.11.2005, 16:30

Цитата:
Originally posted by Alison
[b]VictorY, а Вы ее читали? У Вас есть о ней собственное мнение?
Нет, не читал. Мне эту ссылку сегодня прислали. Не знаю, есть ли она у нас в магазинах. При случае посмотрю.
Ответить с цитированием
  (#24 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 02.11.2005, 18:49

Благодарю за ссылку VictorY.
Мнение выразить трудно не видя книжку, но её содержание:
Цитата:
Лекция 1. Введение в язык логического программирования Пролог
Лекция 2. Логические основы Пролога
Лекция 3. Основные понятия Пролога
Лекция 4. Рекурсия
Лекция 5. Основы Турбо Пролога. Структура программы на Турбо Прологе. Директивы компилятора
Лекция 6. Управление выполнением программы на Прологе
Лекция 7. Списки
Лекция 8. Сортировка списков
Лекция 9. Множества
Лекция 10. Деревья
Лекция 11. Строки
Лекция 12. Файлы
Лекция 13. Внутренние (динамические) базы данных
Лекция 14. Пролог и искусственный интеллект
и оно говорит само за себя. Будем ждать её появления на прилавках.
Ответить с цитированием
Ads
  (#25 (permalink)) Старый
Nessy Nessy вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.12.2005
По умолчанию 24.12.2005, 08:41

Посоветуйте книгу по Прологу (разумеется) по реализации сетей Петрей
и соответственно задачам взаимного исключения, обедающих философах...
Ответить с цитированием
  (#26 (permalink)) Старый
dimlevnik
Guest
 
Сообщений: n/a
По умолчанию 14.02.2006, 17:51

Тут пишут про книги по Прологу, я решил что это будет не лишним.
Я начал переводить tutorial for tyros из VIP6.3.
Посмотрите может кому пригодится.
А может кто и по понятиям разведёт.
Я переводилка ещё тот, так что если по понятиям где не прохожу, Вы уж подскажите
http://www.tutorials.h16.ru/prologfortyros/main.htm
тоже самое, без банеров
http://tutorials.omgpu.ru/prologfortyros/main.htm
Ответить с цитированием
  (#27 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 15.02.2006, 18:36

Здравствуйте dimlevnik!
Благодарим за Вашу помощь.
Думаю, что многим людям будет интересно познакомиться с VIP посредством Вашего перевода, т.к. не все владеют английским в достаточной степени.

:-Винитархъ,!.
Ответить с цитированием
  (#28 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 07.03.2006, 10:56

Надысь наткнулся на сайт (http://kid.stu.cn.ua/~shedar/prolog) с GUI-играми, написанными на Прологе:
1. Арканоид.
2. Сапёр.
3. Поддавки в шашки.
4. Морской бой.
5. Тетрис.
6. 3D Крестики-нолики (на поле 3х3х3).
Можно скачать исполнимые файлы и даже попросить по мылу исходники.
Тысяча благодарностей разработчику!
Ответить с цитированием
  (#29 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 02.05.2006, 21:21

Новые парадигмы VIP7.

Вашему вниманию предлагаются простые примеры использования новых парадигм VIP7, а именно:
  • функциональный стиль программирования
    разрушающее присваивание (факты-переменные)
    цикл foreach
    фильтр решений (завершённый findall)
    полиморфные предикаты
    ветвление if then else
    вложенное ИЛИ и скобки
Все приводимые примеры являются консольными приложениями VIP7.

Вычисления факториала.
Способ 1. Функциональный стиль VIP7.
Код:
implement a111
    open core, console
class predicates
   f : (integer) -> integer Output procedure (i).
clauses
   f(0)=1:-!.
   f(N)=N*f(N-1).
   
    run():-init(),
        write(f(5)),nl,
        _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Способ 2. Использование факта-переменной (не факториала ради, а примера для).
Код:
implement a111
    open core, console
class facts
    x : integer := 1.
class predicates
    f : (integer) procedure (i).
clauses
    f(0):-!.
    f(F):-x:=x*F, f(F-1).
    run():- init(),
      f(10),
      write(x),nl,
       _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Пересечение множеств целых чисел, представленных списками.
Способ 1. С помощью встроенного цикла foreach:
Код:
implement a111
    open core, console

class predicates
    member : (integer,integer*) nondeterm anyflow.
clauses
    member(Elem,[Head|Tail]):- Elem = Head; member(Elem,Tail). 
    
    run():- init(),
      L1 = [1,2,3,4,5,6,7,8,9],
      L2 = [1,3,5,7,9,11,13,15],
      foreach member(X,L1),member(X,L2) do write(X," ") end foreach,
      _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Способ 2. С помощью фильтра решений (завершённого findall):
Код:
implement a111
    open core, console

class predicates
    member : (integer,integer*) nondeterm anyflow.
clauses
    member(Elem,[Head|Tail]):- Elem = Head; member(Elem,Tail). 
    
    run():- init(),
      L1 = [1,2,3,4,5,6,7,8,9],
      L2 = [1,3,5,7,9],
      write([X||member(X,L1),member(X,L2)]),
      _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Пересечение множеств любых однотипных элементов, представленных списками.
С помощью фильтра решений и полиморфного предиката member():
Код:
implement a111
    open core, console

class predicates 
    member : (Elem, Elem*) nondeterm anyflow. 

clauses 
    member(Elem,[Head|Tail]):- Elem = Head; member(Elem,Tail). 
    
    run():- init(),
        L1 = [1,2,3,4,5,6,7,8,9],
        L2 = [1,3,5,7,9,11,13,15],
       write([X||member(X, L1),member(X, L2)]),nl,
       L3 = ['a','b','c','d','e','f','g','h','k','l','m','n','o'],
       L4 = ['f','x','g','a','d','z'],
       write([Y||member(Y, L3),member(Y, L4)]),nl,
        _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Сумма квадратов элементов списка.
Функциональный стиль.
Код:
implement a111
    open core, console
class predicates
    sqlist : (integer*) -> integer Output procedure (i).
clauses
    sqlist([])=0:-!.
    sqlist([X|L])=X*X+sqlist(L).
    
    run():- init(),
       L = [1,8,6,7,9],
       write(sqlist(L)),
       _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Сумма квадратов ряда 1..n.
Функциональный стиль.
Код:
implement a111
    open core, console
class predicates
    sumsq : (integer) -> integer Output procedure (i).
clauses
    sumsq(1)=1:-!.
    sumsq(X)=X*X+sumsq(X-1).
    
    run():- init(),
       write(sumsq(5)),
       _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Ветвление.
Пример определения чётности числа.
Код:
implement a111
    open core, console
clauses
    run():- init(),
       I=5,
       if I mod 2 =0 
          then write(I," - чёт") 
          else write(I," - нечёт") 
       end if,
       _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Вложенное ИЛИ.
Пример выборочного суммирования элементов ряда 1..n. Суммируются только те элементы, которые делятся (на 2 или на 3) и (на 4 или на 5).
Код:
implement a111
    open core, console
class predicates
    sumsq : (integer) -> integer Output procedure (i).
clauses
    sumsq(1)=1:-!.
    sumsq(X)=X+sumsq(X-1):-(X mod 2 = 0; X mod 3 = 0),
                           (X mod 4 = 0; X mod 5 = 0),!.
    sumsq(X)=sumsq(X-1).
    
    run():- init(),
       write(sumsq(6)),
       _=readchar(). 
end implement a111

goal
    mainExe::run(a111::run).
Ответить с цитированием
  (#30 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,864
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 07.05.2006, 21:38

Было несколько вопросов по личке о способах ввода/вывода информации в консольных приложениях Vip6/7. Отвечаю.

Способы ввода/вывода информации в консоле Vip6/7.

Отличием Vip6/7 от прежних версий является непосредственное использование буфера ввода/вывода.

1) Способ ввода/вывода символов.
При чтении символов (char) необходимо помнить, что чтение осуществляется после нажатия "Enter" (если только Вы не изменили режим обработки управляющих символов предикатом setModeProcessed(false())). Поэтому, даже если Вы напечатали несколько символов, предикат readchar() прочтёт только первый символ.
Предикат readchar() в Vip6/7 завершает работу только после нажатия "Enter" и не очищает "за собой" буфер. Поэтому после чтения одного или нескольких символов необходимо принудительно очищать буфер ввода с помощью предиката clearInput(), например:
Код:
Char=readchar(), clearInput(),
Если это не делать, то следующий предикат чтения будет читать из буфера оставшуюся информацию. С точки зрения наблюдателя будет казаться, что следующие предикаты чтения "не работают". Однако это не так. Просто программа отработав задание закроет окно консоли.
ВАЖНО!!! Клавиша "Enter" рассматриватся предикатом readchar() как обыкновенный символ (если только Вы не изменили режим обработки управляющих символов предикатом setModeProcessed(false())).

Вот пример, показывающий "автоматическое" срабатывание предиката readline() по причине того, что символ "Enter" не удалён из буфера после чтения символа предикатом readchar():
Код:
run():-
        init(),
        Char=readchar(),
        %clearInput(),
        write(Char),
        _=readline().
Если раскомментировать clearInput(), то прога будет работать так, как ожидает пользователь Vip5 и более ранних версий. Можно использовать clearInput() непосредственно перед завершающим предикатом _=readline().

Следующий пример показывает как можно прочитать один символ (независимо от того, сколько их было напечатано до нажатия на клавишу "Enter") и получить из него другой символ. После нажатия на клавишу "Enter" нижеприведённая программа очищает буфер, получает символ, код которого на 10 больше, и печатает эту пару символов через стрелку. Для получения эффекта "press Enter" в этом примере используется предикат подавления эхо-вывода setModeEcho(false()) и собственно предикат ожидания клавиши "Enter" - readline().
Код:
run():-
        init(),
        Char=readchar(),
        clearInput(),
        Char1=getCharFromValue(getCharValue(Char)+10),
        write(Char," -> ",Char1),
        setModeEcho(false()),
        _=readline().
Следующий пример демонстрирует чтение первых трёх символов, и вывод их кодов через стрелку. Если Вы ввели меньше трёх символов, то программа будет ожидать ввода остальных недостающих символов. Замечу, что нажатие на клавишу "Enter" это тоже символ, имеющий свой собственный код, поэтому можно просто нажать три раза "Enter" и посмотреть результат.
Код:
run():-
        init(),
        Char1=readchar(),
        Char2=readchar(),
        Char3=readchar(),
        write(getCharValue(Char1)," -> ",getCharValue(Char2)," -> ",getCharValue(Char3)),
        setModeEcho(false()),
        clearInput(),
        _=readline().
2) Способ ввода/вывода строк.
Чтение строки осуществляется предикатом readline(). Этот предикат читает всю строку вместе с символом "Enter", поэтому буфер очищать "за ним" не надо. Следующий пример демонстрирует чтение двух разных строк, т.к. после ввода первой строки буфер очищается автоматически.
Код:
run():-
        init(),
        X=readline(),
        Y=readline(),
        write(X,"->",Y),
        setModeEcho(false()),
        _=readline().
3) Способ ввода/вывода целых чисел.
Предикат read() читает терм. Поэтому использовать clearInput() при вводе последовательности целых чисел не обязательно. По умолчанию предикат read() может работать с целыми числами (integer, unsigned). Перед завершающим предикатом _=readline() всё равно необходимо использовать clearInput().
Код:
 run():-
        init(),
        X=read(),
        Y=read(),
        write(X,"+",Y,"=",X+Y),
        setModeEcho(false()),
        clearInput(),
        _=readline().
4) Способ ввода/вывода вещественных чисел.
Для ввода вещественных чисел необходимо для вводимой переменной указывать домен real, который будет ожидать предикат read().
Код:
run():-
        init(),
        hasDomain(real,X),
        X=read(),
        Y=read(),
        write(X,"+",Y,"=",X+Y),
        setModeEcho(false()),
        clearInput(),
        _=readline().
5) Способ ввода/вывода термов (структур).
Для ввода термов (структур) необходимо в предикате hasDomain(myDom,X) указать ожидаемый при вводе домен для каждой переменной.

Код:
implement a111
    open core, console
domains 
myDom = i(integer);r(real).
class  predicates 
печать : (myDom) procedure (i).
        
clauses
    печать(i(X)):-write("nЦелое: ",X),!.
    печать(r(X)):-write("nВещественное: ",X).
    
    run():-
        init(),
        hasDomain(myDom,X),
        X=read(),
        hasDomain(myDom,Y),
        Y=read(),
        печать(X),
        печать(Y),
        setModeEcho(false()),
        clearInput(),
        _=readline().

end implement a111

goal
    mainExe::run(a111::run).
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по прологу! Mazha Любые вопросы от новичков 0 19.02.2012 15:23
Задачи по прологу Natasha Prolog 0 13.02.2012 16:37
Контрольная по прологу Killer25m Prolog 0 23.11.2010 16:26
5 задач по прологу kotofey Prolog 14 31.05.2010 22:57
Задачи по прологу REZiaMIX Prolog 4 27.11.2008 22:41
три задачки по прологу imported_Жора Prolog 6 08.06.2007 00:34
лабы про прологу myrlogriz Prolog 4 02.11.2006 12:37
25 задач по Прологу к экзамену Майка Prolog 56 25.09.2006 23:04
Тесты по Прологу IRINCHA Prolog 10 19.12.2005 15:25
задача по прологу dimants Prolog 1 07.11.2005 23:08
Контр. по Прологу Doom3 Prolog 0 22.05.2005 16:18
Документация по Турбо Прологу Anonymous Prolog 53 23.01.2005 16:21



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов