Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Изучение ViP8
Результаты опроса: Когда дается к использованию ViP, в первую очередь преподаватель ставит целью
изучение языка программирования Prolog 1 50.00%
изучение multi paradigm programming language based on the logical language Prolog 1 50.00%
обучение программированию, как таковому 1 50.00%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 2. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
Lightbulb Изучение ViP8 - 14.12.2018, 11:14

Открываю новую тему, буду немного изучать, по мере возможности
Первый вопрос:
Где найти описание PFC, кроме c:\Program Files (x86)\Visual Prolog 8 PE\appData\doc\vip.chm (не факт, что там по версии 8), который кстати найти можно только вручную, как запустить из меню Help я не нашел.
На Language Reference есть обе ссылки, хочешь Web, хочешь PDF, а по Prolog Foundation Classes засада


не пиши длинный предикат
Ответить с цитированием
  (#2 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 631
Сказал(а) спасибо: 17
Поблагодарили 50 раз(а) в 50 сообщениях
Регистрация: 28.03.2012
По умолчанию 14.12.2018, 16:54

есть файл ProDir\appData\doc\vip.chm
Ответить с цитированием
  (#3 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 14.12.2018, 18:01

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
есть файл ProDir\appData\doc\vip.chm
Это я нашел, написано же


не пиши длинный предикат
Ответить с цитированием
  (#4 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 14.12.2018, 18:04

Написал маленькое консольное приложение, как начальный шаблон для Visual Prolog 8.2 PE
prolog Код:
implement main
    open core, console, list, math, string, string8

domains

class predicates
del_repeated1 : (Elem*, Elem*) anyflow.
del_repeated2 : (Elem*, Elem*) nondeterm anyflow.

clauses
del_repeated1([], []).
del_repeated1([H, H | T], R) :-
    !,
    del_repeated1([H | T], R).
del_repeated1([H | T], [H | R]) :-
    del_repeated1(T, R).

del_repeated2([], []).
del_repeated2([H], [H]).
del_repeated2([H, H | T], R) :-
    del_repeated2([H | T], R).
del_repeated2([H1, H2 | T], [H1 | R]) :-
    H1 <> H2,
    del_repeated2([H2 | T], R).

run() :-
    initUtf8,
    setConsoleTitle("Visual Prolog 8.2 PE: Консольное приложение"),
    Task = "Задача: Удаление дупликатов из списка",
    Test = "Тест: [1,1,2,2,3,3,3,4,4,4,4] -> [1,2,3,4] ",
    Xs = [1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4],
    del_repeated1(Xs, Ys),
    del_repeated2(Xs, Ys),
    Ys = list::removeConsecutiveDuplicates(Xs),
    Ys = [1, 2, 3, 4],
    nl,
    write(" ", Task),
    nl,
    write(" ", Test),
    nl,
    write(" Результат: ", Xs, " -> ", Ys),
    nl,
    _ = readChar(),
    ! ; succeed.

end implement main

goal
    main::run.
Миниатюры
vip_del_repeated.png  


не пиши длинный предикат
Ответить с цитированием
  (#5 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 14.12.2018, 18:09

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
есть файл
А проголосовать по опросу?


не пиши длинный предикат
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 631
Сказал(а) спасибо: 17
Поблагодарили 50 раз(а) в 50 сообщениях
Регистрация: 28.03.2012
По умолчанию 14.12.2018, 18:49

сорри, не внимателен. просто если курсор на предикате pfc нажать F1
Ответить с цитированием
  (#7 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 631
Сказал(а) спасибо: 17
Поблагодарили 50 раз(а) в 50 сообщениях
Регистрация: 28.03.2012
По умолчанию 14.12.2018, 18:51

по опросу. Я не преподаватель.
Ответить с цитированием
  (#8 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 14.12.2018, 19:06

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
по опросу. Я не преподаватель.
Не поверишь, - я тоже, - может каких пару-тройку лекций и прочитал, но не студентам, и, не по Прологу


не пиши длинный предикат
Ответить с цитированием
  (#9 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 14.12.2018, 19:14

По опросу, немного некорректно написал, это скорее просто мнение любого участника форума об использовании ViP, или пожелание, что должен ставить целью преподаватель, как-то так... К тому же там множественный выбор, можно выбрать и все три пункта.


не пиши длинный предикат
Ответить с цитированием
  (#10 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,035
Сказал(а) спасибо: 2
Поблагодарили 323 раз(а) в 322 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 14.12.2018, 20:24

Цитата:
Сообщение от arlat Посмотреть сообщение
class predicates
del_repeated1 : (Elem*, Elem*) anyflow.
del_repeated2 : (Elem*, Elem*) nondeterm anyflow.

clauses
del_repeated1([], []).
del_repeated1([H, H | T], R) :-
!,
del_repeated1([H | T], R).
del_repeated1([H | T], [H | R]) :-
del_repeated1(T, R).

del_repeated2([], []).
del_repeated2([H], [H]).
del_repeated2([H, H | T], R) :-
del_repeated2([H | T], R).
del_repeated2([H1, H2 | T], [H1 | R]) :-
H1 <> H2,
del_repeated2([H2 | T], R).
Я бы объявил и определил эти два предиката так:
Visual Prolog Код:
class predicates
del_repeated1 : (Elem*, Elem*) anyflow.
del_repeated2 : (Elem*, Elem*) determ anyflow.

clauses
del_repeated1([H, H | T], R) :-
    !,
    del_repeated1([H | T], R).
del_repeated1([H | T], [H | R]) :-
    del_repeated1(T, R).
del_repeated1([], []).

del_repeated2([H, H | T], R) :- !,
    del_repeated2([H | T], R).
del_repeated2([H1, H2 | T], [H1 | R]) :-
    !,
    del_repeated2([H2 | T], R).
del_repeated2(R, R).
Ответить с цитированием
  (#11 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 17.12.2018, 14:37

Цитата:
Сообщение от Винитарх Посмотреть сообщение
Я бы объявил и определил эти два предиката так
Граничное условие подправить это пожалуйста, но del_repeated2 был осознанно без отсечения, для обучающего воздействия.
Мне тут главное было еще и примерный шаблон отработать для решения небольших задач консольным приложением.


не пиши длинный предикат

Последний раз редактировалось arlat; 17.12.2018 в 14:40
Ответить с цитированием
  (#12 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 17.12.2018, 15:14

Немного продвинул шаблон для консольного приложения
prolog Код:
% main.pro

implement main
    open core, console, list, math, string

domains

class predicates
run : (integer) procedure (i).
del_repeated1 : (Elem*, Elem*) determ (i,o).
del_repeated2 : (Elem*, Elem*) nondeterm (i,i).

clauses
del_repeated1([H, H | T], R) :-
    !,
    del_repeated1([H | T], R).
del_repeated1([H | T], [H | R]) :-
    del_repeated1(T, R).
del_repeated1([], []).

del_repeated2([H], [H]).
del_repeated2([H, H | T], R) :-
    del_repeated2([H | T], R).
del_repeated2([H1, H2 | T], [H1 | R]) :-
    H1 <> H2,
    del_repeated2([H2 | T], R).
del_repeated2(R, R).

run(1) :-
    Task = "Задача: Удаление дупликатов из списка",
    Test = "Тест: [1,1,2,2,3,3,3,4,4,4,4] -> [1,2,3,4] ",
    Xs = [1,1,2,2,3,3,3,4,4,4,4],
    del_repeated1(Xs, Ys),
    del_repeated2(Xs, Ys),
    Ys = list::removeConsecutiveDuplicates(Xs),
    Ys = [1,2,3,4],
    nl, write(" ", Task), nl, write(" ", Test), nl,
    write(" Результат: ", Xs, " -> ", Ys),
    nl,
    !.
run(_).

run() :-
    initUtf8,
    setConsoleTitle("Visual Prolog 8.2 PE: Консольное приложение"),
    run(1),
    _ = readLine().

end implement main

goal
    main::run.


не пиши длинный предикат

Последний раз редактировалось arlat; 17.12.2018 в 15:17
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 361
Сказал(а) спасибо: 15
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 17.12.2018, 20:06

Продолжаем как-то так, в дальнейшем код main.pro буду приводить частично
prolog Код:
% main.pro

implement main
    open core, console, list, math, string

domains

class predicates
run : (integer) procedure (i).
del_repeated1 : (Elem*, Elem*) determ (i,o).
del_repeated2 : (Elem*, Elem*) nondeterm (i,i).
list_min_max_count_lt : (Elem*, Elem*, integer) determ (i,o,o).
append_nd : (Elem*, Elem*, Elem*) nondeterm anyflow.
count_lt : (Elem*, integer, integer) determ (i,i,o).

clauses
% run(1)
del_repeated1([H, H | T], R) :-
    !,
    del_repeated1([H | T], R).
del_repeated1([H | T], [H | R]) :-
    del_repeated1(T, R).
del_repeated1([], []).

del_repeated2([H], [H]).
del_repeated2([H, H | T], R) :-
    del_repeated2([H | T], R).
del_repeated2([H1, H2 | T], [H1 | R]) :-
    H1 <> H2,
    del_repeated2([H2 | T], R).
del_repeated2(R, R).

% run(2)
list_min_max_count_lt(Xs, Ys, N) :-
    Min = list::minimum(Xs),
    Max = list::maximum(Xs),
    append_nd(_, [Min | Xs1], Xs),
    append_nd(Xs2, [Max | _], Xs1),
    append_nd([Min | Xs2], [Max], Ys),
    count_lt(Ys, 0, N),
    !.

append_nd([], L, L).
append_nd([H | T], L, [H | R]):-
    append_nd(T, L, R).

count_lt([X1, X2 | Xs], N0, N) :-
    ( X1 < X2, N1 = N0 + 1 ; N1 = N0 ),
    !,
    count_lt([X2 | Xs], N1, N).
count_lt(_, N, N).

% run(N)
run(1) :-
    Task = "Задача:\n   Удаление дупликатов из списка",
    Test = "Тест:\n   [1,1,2,2,3,3,3,4,4,4,4] -> [1,2,3,4]",
    Xs = [1,1,2,2,3,3,3,4,4,4,4],
    del_repeated1(Xs, Ys),
    del_repeated2(Xs, Ys),
    Ys = list::removeConsecutiveDuplicates(Xs),
    Ys = [1,2,3,4],
    nl, write(" ", Task), nl, write(" ", Test), nl,
    write( "Результат:\n   ", Xs, " -> ", Ys),
    nl,
    !.
run(2) :-
    Task = string::concatWithDelimiter(
             [ "Задача:\n",
               "Между первым минимальным и первым максимальным элементами списка\n",
               "найти количество элементов, больше соседнего (слева)"
             ],
             "   "),
    Test = "Тест:\n   [3,7,1,3,5,8,7,1,2] -> [1,3,5,8] -> 3",
    Xs = [3,7,1,3,5,8,7,1,2],
    list_min_max_count_lt(Xs, Ys, N),
    Ys = [1,3,5,8], N = 3,
    nl, write(" ", Task), nl, write(" ", Test), nl,
    write(" Результат:\n   ", Xs, " -> ", Ys , " -> ", N),
    nl,
    !.
run(_).

run() :-
    initUtf8,
    setConsoleTitle("Visual Prolog 8.2 PE: Консольное приложение"),
    %run(1),
    run(2),
    _ = readLine().

end implement main

goal
    main::run.
Миниатюры
vip_run2.png  


не пиши длинный предикат
Ответить с цитированием
  (#14 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,035
Сказал(а) спасибо: 2
Поблагодарили 323 раз(а) в 322 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 17.12.2018, 21:19

Вместо:
Visual Prolog Код:
( X1 < X2, N1 = N0 + 1 ; N1 = N0 ),!,
можно использовать условное выражение:
Visual Prolog Код:
N1 = if X1<X2 then N0+1 else N0 end if,
или даже так:
Visual Prolog Код:
( X1 < X2, N1 = N0 + 1 orelse N1 = N0 ),
Ответить с цитированием
Пользователь сказал cпасибо:
arlat (18.12.2018)
  (#15 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 631
Сказал(а) спасибо: 17
Поблагодарили 50 раз(а) в 50 сообщениях
Регистрация: 28.03.2012
По умолчанию 17.12.2018, 21:54

мне нравится так
prolog Код:
N1 = N0 + if X1<X2 then 1 else 0 end if,
здесь лучше видна логика, то что N1 больше или равна N0
Ответить с цитированием
Пользователь сказал cпасибо:
arlat (18.12.2018)
Ответ

Метки
vip 8 , visual prolog 8

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VIP8. Баги и предложения по улучшению. Drovosek Prolog 91 27.12.2017 12:42
Изучение Visual Prolog Adakolt Prolog 2 01.05.2017 21:10
изучение sta Любые вопросы от новичков 0 13.04.2016 23:10
Изучение ADO.NET Fill Вопросы начинающих программистов 0 22.03.2011 21:51
С чего начать изучение С++ denes С/С++ 15 12.07.2010 15:51
Изучение С/С++ Geruk Офтопик 12 09.05.2009 00:02
Изучение алгоритма Дейкстры 4ma Вопросы начинающих программистов 1 07.06.2007 21:53
С чего начать изучение 1C Alex Dyller Вопросы начинающих программистов 8 19.03.2007 23:22
С чего начать изучение Qt yarmolchuk Trolltech Qt 4 06.12.2006 22:09
С чего начать изучение С++ Bogdan1024 С/С++ 3 08.05.2006 23:56
изучение php без интернета gamemaker PHP 2 02.08.2005 11:50
Повторное изучение программы С++ Dark Delphin Вопросы начинающих программистов 0 20.01.2005 23:01



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