Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Visual Prolog 7.5 / 25 сообщений из 28, страница 1 из 2
17.12.2014, 14:58
    #38836063
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
вот такая учебная задача - лабораторная работа
Код: 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
17.12.2014, 15:08
    #38836073
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
Давненько не встречал Prolog. Круть...
...
Рейтинг: 0 / 0
17.12.2014, 17:09
    #38836200
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
maytonДавненько не встречал Prolog. Круть...

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

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

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



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

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

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

Для "раскуривания" трубки...
...
Рейтинг: 0 / 0
17.12.2014, 18:20
    #38836291
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
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
17.12.2014, 18:33
    #38836316
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
maytonkmaw, это сойдет читать для твоей реализации лабы?

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

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

пролистал, я уже его видел. в двух словах: не могу победить императивное мышление и ищу (подсознательно) решение в виде, где в цикле идет перебор
...
Рейтинг: 0 / 0
17.12.2014, 18:37
    #38836320
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
Код: 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
17.12.2014, 18:44
    #38836327
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
суть пролога - записать алгоритм в рекурсивной форме в виде декларативных правил? (даже когда это идет вразрез с интуицией)
...
Рейтинг: 0 / 0
17.12.2014, 18:47
    #38836330
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
Код: python
1.
book("Язык и смысл",  author("Иванов", "Иван", 1971), edition("Наука", 1, 2000, 458, 800, 4500000))



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

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

Код: javascript
1.
book(author)



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

Код: javascript
1.
book(author)




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

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

Код: javascript
1.
book(author)




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

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


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

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

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

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

я сделал из лаб на ~0,52 по однобальной. может до зачтено/три преподаватель округлит...
...
Рейтинг: 0 / 0
18.12.2014, 20:39
    #38837571
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Visual Prolog 7.5
Код: 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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Visual Prolog 7.5 / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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