Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/121: Рейтинг темы: голосов - 121, средняя оценка - 4.59
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
1

Базовые предикаты

22.12.2011, 20:23. Показов 23285. Ответов 2

Author24 — интернет-сервис помощи студентам
Максимум, максимальный, минимум, минимальный
Prolog
1
2
3
    max([Head|Tail],Result):-
        max(Tail,Result),Result>Head,!.
    max([Head|_],Head).
Является ли елементом списка
Prolog
1
2
        member(H,[H|_]):-!.%чтоб сделать nondeterm заменить на member(H,[H|_]).
        member(H,[_|T]):-member(H,T).
Количество елементов Item в списке
Prolog
1
2
3
4
5
6
    count(_,[],0):-!.
    count(Item,[Item|Tail],Count):-
        count(Item,Tail,Result),
        Count=Result+1,!.
    count(Item,[_|Tail],Count):-
        count(Item,Tail,Count).
Сумма цыфр числа
Prolog
1
2
3
4
5
    sumOfDigits(0,0):-!.
    sumOfDigits(Value,Sum):-
                       Valuen=Value div 10, 
                       sumOfDigits(Valuen,Sumn),
                       Sum=Sumn + Value mod 10.
Конкатенация, соединение списков
Prolog
1
2
3
    conc([],L,L).
    conc([X|L1],L2,[X|L3]) :- 
        conc(L1,L2,L3).
Поиск в глубину. dfs(Откуда, [Куда], Результат).
Prolog
1
2
3
4
5
    dfs(A,[A|Path],[A|Path]).
    dfs(A,[Y|Path1],Path):- 
        exist(X,Y), % Ребро
        not(member(X,Path1)),
        dfs(A,[X,Y|Path1],Path).
Поиск в ширину. bfs([[Конец]], Начало, Результат)
Prolog
1
2
3
4
5
6
7
8
9
10
    bfs([[Node|Path]|_],Node,[Node|Path]).
    bfs([[B|Path]|Paths],Z,Solution) :- 
        findall(S, new_node(B,S,Path), NewPaths),
        conc(Paths,NewPaths,Paths1),!, 
        bfs(Paths1,Z,Solution);bfs(Paths,Z,Solution).  
 
    new_node(B,S,Path) :- 
        exist(B,B1), 
        not(member(B1,[B|Path])), 
        S=[B1,B|Path].
Реверс списка, перевернуть список
Prolog
1
2
3
4
5
    rev(X,Y):- 
        rev([],X,Y).  
    rev(Y,[],Y).  
    rev(X1,[Z|X2],Y):- 
        rev([Z|X1],X2,Y).
Быстрая сортировка
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    div2(_,[],[],[]).    
    div2(X,[Y|TAIL], [Y|S],L):-
        X>Y,!,
        div2(X,TAIL,S,L).    
    div2(X,[Y|TAIL], S,[Y|L]):-
        div2(X,TAIL,S,L).    
 
    link([],L,L).    
    link([X|L1],L2,[X|L3]):-
        link(L1,L2,L3).    
 
    qsort([],[]).    
    qsort([X|TAIL],SORTLIST) :-
        div2(X, TAIL, S, L),    
        qsort(S, SORTS),    
        qsort(L, SORTL),    
        link(SORTS,[X|SORTL],SORTLIST).
Сортировка вставкой
Prolog
1
2
3
4
5
6
7
8
9
isort([],[]).
    isort([X|X1],Y):- 
        isort(X1,Y1),
        ins(X,Y1,Y).
    
    ins(X,[Y|List],[Y|List1]):- 
        X>Y,!,
        ins(X,List,List1).
    ins(X,List,[X|List]).
Бинарная сортировка
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BINARY SORT
    bsort([],[]).
    bsort([X],[X]).
    bsort(X,Y):-
        div(X,A,B),
        bsort(A,C),
        bsort(B,D),
        conc(C,D,Y).
    
    div([],[],[]).
    div([X],[X],[]).
    div([X,Y|T],[X|A],[Y|B]):-
        div(T,A,B).
    
    conc([],[],[]).
    conc([X],[],[X]).
    conc([],[X],[X]).
    conc([X|A],[Y|B],[Y|C]):-X>Y,!,conc([X|A],B,C).
    conc([X|A],B,[X|C]):-conc(A,B,C),!.
Разбить список на 2 части
Prolog
1
2
3
4
    div([],[],[]).
    div([X],[X],[]).
    div([X,Y|T],[X|A],[Y|B]):-
        div(T,A,B).
Перетосовка(помогает для логических задач)
Prolog
1
2
3
4
5
6
7
        insert_evry_position(X, [X|T], T).
        insert_evry_position(X, [H|T], [H|S]):-
                insert_evry_position(X, T, S).
 
        permutation([], []).
        permutation([H|T], R):-
                permutation(T, X), insert_evry_position(H, R, X).
Удалить повторы, из списка в множество
Prolog
1
2
3
        delsame([],[]):-!.
        delsame([Hi|Ti],R):-member(Hi,Ti),delsame(Ti,R),!.
        delsame([Hi|Ti],[Hi|R]):-delsame(Ti,R).
Добавлено через 3 часа 11 минут
Примерить правило ко всем елементам списка
Prolog
1
2
applyToAll(_,[]):-!.
applyToAll(Predicate,[H|Tail]):-apply(Predicate,[H]),applyToAll(Predicate,Tail).
11
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2011, 20:23
Ответы с готовыми решениями:

Встроенные предикаты. Предикаты взаимодействия, размещение данных
Есть три вопроса: С равенством разобрался, вроде ничего сложного. Про предикаты нашел много...

Предикаты
Написать предикат, который для заданного числа и заданного числового списка, возвращает новый...

Предикаты
Представить приведенные ниже утверждения в виде нескольких правил. Ввести правила в БД и создать...

Пролог. Предикаты
Что-то мне совсем взорвало мозг это задание "Создайте предикат, проверяющий, являются ли два...

2
Заблокирован
24.12.2011, 10:10 2
Цитата Сообщение от freest Посмотреть сообщение
Сумма цифр числа
Prolog
1
2
3
4
5
6
7
8
p( N, S ) :-
        str_int( Str,  N ),
        sum( Str, S ).
    sum( Str, S ):-
        frontchar( Str, C, StrStr ),
        sum( StrStr, SS ),
        S = SS + C - '0';
        S = 0,!.
Добавлено через 12 минут
Цитата Сообщение от freest Посмотреть сообщение
Конкатенация, соединение списков
Чаще, такой предикат называется append - МБ в некоторых диалектах имеется стандартный с таким именем.
1
0 / 0 / 0
Регистрация: 29.10.2012
Сообщений: 3
29.10.2012, 09:09 3
Цитата Сообщение от rrrFer Посмотреть сообщение
Чаще, такой предикат называется append - МБ в некоторых диалектах имеется стандартный с таким именем.
В SWI-Prolog.
0
29.10.2012, 09:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2012, 09:09
Помогаю со студенческими работами здесь

Рекурсивные предикаты
Реализовать операцию возведение в степень на основе сложения, а также подсчитать количество...

Constrain предикаты
Здравствуйте. Мне попалось задание, где из готовой программы нужно выписать constrain предикаты....

Prolog предикаты
Здравствуйте. Не давно в университете начали изучать Visual Prolog.Ну после нормальных языков...

Предикаты пролог
вопрос такое ,что такое встроенные предикаты ,что они делают ,какие бывают.Что такое предикаты...

Определить предикаты
Определить предикаты «свекровь » и «свекор » через предикаты «ребенок» и «супруг», предварительно...

Стандартые предикаты
Возможно ли вычислить минимальный элемент, используя только стандартные предикаты?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru