powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Visual Prolog 7.5
25 сообщений из 28, страница 1 из 2
Visual Prolog 7.5
    #38836063
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такая учебная задача - лабораторная работа
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
/*Предметная  область  –  библиотека.
Книга:      название, автор, издание.
Автор:      имя, фамилия,  год  рождения.
Издание:  издательство, номер издания, год издания, количество страниц, цена, гонорар автора.

Реализовать следующие типы запросов:
1) Найти автора, у которого максимальный гонорар за издание книги.
2) Найти все книги, изданные только один раз.
3) Найти всех авторов, родившихся позже указанного года.
4) Найти все издательства, в которых была издана указанная книга.
5) Найти все книги, цена которых не изменялась в разных изданиях
*/

class main
    open core

predicates
    run : core::runnable.

domains
    book = book(string Название, author Автор,  edition Издание).
    author = author(string Фамилия, string Имя, integer Годрождения).
    edition = edition(string Издательство, integer Номериздания, integer Годиздания, integer Количествостраниц, integer Цена, integer Гонораравтора).

end class main



один запрос 4-й, сразу написал

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
implement main
    open core, console, list


class facts
    library: (book).

clauses
   
    library(book("Язык и смысл",  author("Иванов", "Иван", 1971), edition("Наука", 1, 2000, 458, 800, 4500000))).
    library(book("Язык и смысл", author("Иванов", "Иван", 1971), edition("Жизнь", 2, 2003, 604, 750, 1500000))).
    library(book("Перетряска", author("Семенов", "Семен", 1954), edition("Протон", 1, 2001, 455, 620, 6505000))).
    library(book("Перетряска", author("Семенов", "Семен", 1954), edition("Протон", 2, 2004, 425, 523, 105000))).
    library(book("Космос", author("Петров", "Петр", 1954), edition("Протон", 1, 2001, 455, 620, 4505000))).
    library(book("Камень", author("Семенов", "Семен", 1954), edition("Протон", 1, 2001, 455, 620, 6505000))).
    library(book("Охлаждение", author("Кузнецов", "Семен", 1965), edition("Наука", 2, 1995, 502, 320, 2205000))).
    library(book("Перетряска пыли", author("Иваненко-Семенов", "Николай", 1959), edition("Огородник", 1, 2004, 1455, 1120, 2235000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 1, 2001, 455, 620, 6505000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 2, 2003, 455, 620, 6505000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 3, 2009, 455, 620, 6505000))).
    library(book("Что делать там?", author("Николай", "Денчук", 1958), edition("Протон", 1, 2001, 1000, 785, 1505000))).
    library(book("Что делать там?", author("Николай", "Денчук", 1958), edition("Огородник", 1, 2011, 1100, 885, 1805000))).
    library(book("Рыбы", author("Водник", "Ольга", 1979), edition("Море", 1, 2011, 300, 420, 505000))).
    library(book("Рыбы", author("Водник", "Ольга", 1979), edition("Море", 2, 2013, 302, 420, 505000))).


    run():-

        write("4) Найти все издательства, в которых была издана книга \"Язык и смысл\":"), nl,
        library(book("Язык и смысл", _, edition(Title, _, _, _, _, _))),
            write(Title), nl,
        fail;

        
        _ = readLine().
end implement main

goal
    mainExe::run(main::run).



как остальные - даже не знаю с какого края подойти. вроде преобразовать в список все факты и работать со списком, там вроде предикат filter имеется, но не пойму как к элементам структуры book обращаться. вообще не шарю в прологе и времени изучать нет

может какой пример подскажите, чтобы по быстрому раскурить мою задачу?

спасибо
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836073
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давненько не встречал Prolog. Круть...
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836200
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавненько не встречал Prolog. Круть...

ну да, куда уж круче (почти плача). дошел при чтении мануалов до откровенной императивщины, но, думаю, это не то, как надо мою лабы делать
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836220
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в начале 90-х я сидел в одной квартире (офисе))) ) с людьми которые его писали. В СПб, на Красных текстильщиков (сейчас вроде улицу переименовали).

)))
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836228
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пролог?
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836231
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давненько писал 1 лабу на Прологах
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836235
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читаю (по диагонали) очередной учебник, пытаясь найти ответ на мой вопрос. и какие задачи там рассматриваются:

Код: python
1.
король думает, что королева думает, что она не в своем уме. в своем ли уме король?



авторы тролии?
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836242
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw, дай тынц на твой учебник. Мы тоже почитаем. Вообще не кажется что эту задачку я-бы лучше решал на XML/XPath.
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836263
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonkmaw, дай тынц на твой учебник. Мы тоже почитаем. Вообще не кажется что эту задачку я-бы лучше решал на XML/XPath.

это лаба по прологу. там выбора нет
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836265
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Адаменко, Андрей Кучуков Логическое программирование и Visual Prolog
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836266
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц не могу, уже не помню откуда скачал
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836282
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw, это сойдет читать для твоей реализации лабы?

http://www.ssau.ru/files/resources/sotrudniki/soldatova_lezina.pdf

Для "раскуривания" трубки...
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836291
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.intsoft.spb.ru/prolog.html

...Visual Prolog, developed by Danish company Prolog Development Center with INTELLIGENCE-SOFT participation, is the most powerful and effective Prolog programming tool. It meets the professional's demands for speed and performance, producing compact, fast and highly optimized native machine code...
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836316
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonkmaw, это сойдет читать для твоей реализации лабы?

http://www.ssau.ru/files/resources/sotrudniki/soldatova_lezina.pdf

Для "раскуривания" трубки...

пролистал, я уже его видел. в двух словах: не могу победить императивное мышление и ищу (подсознательно) решение в виде, где в цикле идет перебор
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836320
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
implement main
    open core, console


class predicates
    del: (unsigned*, integer N, integer M, unsigned* [out]).

clauses


    del(L, _, 0, L):- !.
    del([_ | Tail], 1, M, Tail1):- !, M1=M-1, del(Tail, 1, M1, Tail1).
    del([H | Tail], N, M, [H | Tail1]):- N1=N-1, del(Tail, N1, M, Tail1).
    del([], _, _, []).


    run():-

        L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
        write(L), nl,
        del(L, 4, 4, L2),
        write(L2), nl,

        _ = readLine().
end implement main

goal
    mainExe::run(main::run).



это удаление m элементов списка, начиная с n-го. по сути - рекурсия. в чем тут "логическое" - не догоняю. мозг взрывается
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836327
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
суть пролога - записать алгоритм в рекурсивной форме в виде декларативных правил? (даже когда это идет вразрез с интуицией)
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836330
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: python
1.
book("Язык и смысл",  author("Иванов", "Иван", 1971), edition("Наука", 1, 2000, 458, 800, 4500000))



как сделать так?

Код: c#
1.
book.author
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836333
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю что да. Но интуиция здесь неуместна. Она просто в мире инфо-технологий никак не формализуема.
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836335
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может как-то так

Код: javascript
1.
book(author)



типа функция которая вернёт отношение истины.
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836343
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожет как-то так

Код: javascript
1.
book(author)




типа функция которая вернёт отношение истины.

я наверное вопрос плохо сформулировал. со списками я понял как работать - проблема только в искусстве "логики рекурсии". но как, например, мой пример со списком и удалением обобщить на списки структур. допустим, задача стояла бы, удалить m книг, у которых год издания fun(y)?
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836344
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawmaytonМожет как-то так

Код: javascript
1.
book(author)




типа функция которая вернёт отношение истины.

я наверное вопрос плохо сформулировал. со списками я понял как работать - проблема только в искусстве "логики рекурсии". но как, например, мой пример со списком и удалением обобщить на списки структур. допустим, задача стояла бы, удалить m книг, у которых год издания fun(y)?
Наверное удаление - подразумевает написание запроса который вернёт все книги кроме тех у которых год издания fun(y).
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836364
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonkmawпропущено...


я наверное вопрос плохо сформулировал. со списками я понял как работать - проблема только в искусстве "логики рекурсии". но как, например, мой пример со списком и удалением обобщить на списки структур. допустим, задача стояла бы, удалить m книг, у которых год издания fun(y)?
Наверное удаление - подразумевает написание запроса который вернёт все книги кроме тех у которых год издания fun(y).

это да, там переменные не измененные: изменение списка - создание нового
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836374
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини бро. Я - пас. Пускай другие Про-ложники (Про-логщики) решат тебе эту задачу в топике.

Мне она пока не по зубам. Диковинный он этот Пролог... Мдя... Вот ежели-б XML или JSON...
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38836381
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИзвини бро. Я - пас. Пускай другие Про-ложники (Про-логщики) решат тебе эту задачу в топике.

Мне она пока не по зубам. Диковинный он этот Пролог... Мдя... Вот ежели-б XML или JSON...

я сделал из лаб на ~0,52 по однобальной. может до зачтено/три преподаватель округлит...
...
Рейтинг: 0 / 0
Visual Prolog 7.5
    #38837571
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
implement main
    open core, console, list

class facts
    library: (book).

class predicates
    max: (integer X1, integer X2, integer [out]) nondeterm. %максимальное из двух чисел
    max_list: (integer*, integer[out]) nondeterm. %максимальный элемент списка
    amount: (string* List, string Elem, integer [out]) nondeterm. %количество элементов Elem в списке
clauses

    max( X, Y, X ):-  X >= Y.
    max( X, Y, Y ):-  X < Y.


    max_list( [ X ], X ).
    max_list( [ X, Y | Tail ], Max ) :-
        max_list( [ Y | Tail ], MaxTail ),
        max( X, MaxTail, Max ).

    amount([],_,0).
    amount([X|Tail],X,A):-
        !,amount(Tail,X,A1), A = A1+1.
    amount([_|Tail],X,A):-
        amount(Tail,X,A).



    library(book("Язык и смысл",  author("Иванов", "Иван", 1971), edition("Наука", 1, 2000, 458, 800, 4500000))).
    library(book("Язык и смысл", author("Иванов", "Иван", 1971), edition("Жизнь", 2, 2003, 604, 750, 1500000))).
    library(book("Перетряска", author("Карпов", "Сергей", 1954), edition("Протон", 1, 2001, 455, 620, 6505000))).
    library(book("Перетряска", author("Карпов", "Сергей", 1954), edition("Протон", 2, 2004, 425, 523, 105000))).
    library(book("Космос", author("Петров", "Петр", 1954), edition("Протон", 1, 2001, 455, 620, 4505000))).
    library(book("Камень", author("Семенов", "Семен", 1954), edition("Протон", 1, 2001, 455, 620, 6505000))).
    library(book("Охлаждение", author("Кузнецов", "Семен", 1965), edition("Наука", 2, 1995, 502, 320, 2205000))).
    library(book("Пыль", author("Иваненко", "Николай", 1959), edition("Огородник", 1, 2004, 1455, 1120, 2235000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 1, 2001, 455, 620, 6505000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 2, 2003, 455, 620, 6505000))).
    library(book("Огурцы", author("Семенов", "Семен", 1954), edition("Огородник", 3, 2009, 455, 620, 6505000))).
    library(book("Что делать там?", author("Николай", "Денчук", 1958), edition("Протон", 1, 2001, 1000, 785, 1505000))).
    library(book("Что делать там?", author("Николай", "Денчук", 1958), edition("Огородник", 1, 2011, 1100, 885, 1805000))).
    library(book("Рыбы", author("Водник", "Ольга", 1979), edition("Море", 1, 2011, 300, 420, 505000))).
    library(book("Рыбы", author("Водник", "Ольга", 1979), edition("Море", 2, 2013, 302, 420, 505000))).


    run():-

        findall(G, library(book(_,  _, edition(_, _, _, _, _, G))), L1), %формируем список гонораров
        max_list(L1, MG), %находим максимальный гонорар

        writef("1) Найти авторов, у которых максимальный гонорар за издание книги (%):", MG), nl,
        library(book(_, author(FM, IM, DR), edition(_, _, _, _, _, G))), G = MG,
            writef("% %, %", FM, IM, DR), nl,
        fail;

        findall(Tilte, library(book(Tilte,  _, _)), L2), %формируем список названий книг
        write("2) Найти все книги, изданные только один раз:"), nl,
        library(book(Title, _, _)), amount(L2, Title, C), C = 1,
            write(Title), nl,
        fail;

        write("3) Найти всех авторов, родившихся позже 1954-го года:"), nl,
        library(book(_, author(FM, IM, DR), _)), DR > 1954,
            writef("% %, %", FM, IM, DR), nl,
        fail;

        write("4) Найти все издательства, в которых была издана книга \"Язык и смысл\":"), nl,
        library(book("Язык и смысл", _, edition(Name_izd, _, _, _, _, _))),
            write(Name_izd), nl,
        fail;

        %write("5) Найти все книги, цена которых не изменялась в разных изданиях:"), nl,

        _ = readLine().
end implement main

goal
    mainExe::run(main::run).



почти все запросы реализовал, как смог
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Visual Prolog 7.5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]