[Закрыть]
 
popoff.donetsk.ua
Настоящий воин, внимательно выслушает слова мудреца, даже если их смысл ему не понятен. Ибо слово его есть ключ к пониманию других речей. Также как и хорошее вино, ценность которого зависит от выдержки.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Функциональное и логическое программирование - Рекурсия в Прологе

Рекурсия в Прологе

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
coffee
Юлия
Окт, 2008
Сообщений: 7
coffee url://forum.message:2984
Рекурсия в Прологе

Ув. Юрий Васильевич, буду очень благодарна, если вы посмотрите мою лаборторную и скажете, пойдет ли такое решение задачи. Если нет - укажите, пожалуйста, что неправильно, и, если возможно, как переделать.

Задание:
Отношение ЧЕТНАЯ_ПЕРЕСТАНОВКА для выяснения четности перестановки Y списка X. Например:
? - ЧЕТНАЯ_ПЕРЕСТАНОВКА([3, 4, 5], [4, 5, 3]) – истинно
? - ЧЕТНАЯ_ПЕРЕСТАНОВКА([3, 4, 5], [4, 3, 5]) – нет


<?php domains
int_list
=integer*

predicates
perm
(int_listint_list)
even_head(integerint_listintegerint_listinteger)
even(int_listint_listinteger)
inv(integerintegerintegerintegerinteger)

clauses
perm
(LL1):- even(LL1K), K=1.
 
even
([], [], 1).
even([H|T], [H1|T1], M):- even_head(HTH1T1K), even(TT1M1), M=M1*K
  
even_head(X, [], A, [], 1).
even_head(X, [H|T], X1, [H1|T1], P):- inv(XHX1H1K), 
    
even_head(XTX1T1P1), P=K*P1.
  
inv(XHX1H11):- X<HX1<H1,!.  
inv(XHX1H1,-1):- X<HX1>H1,!.
inv(XHX1H11):- X>HX1>H1,!.
inv(XHX1H1, -1):-X>HX1<H1,!. ?>
Это сообщение было отредактировано coffee 19.12.09 18:02.
popoff
Yuri
Июл, 2004
Сообщений: 932
popoff url://forum.message:2988

запрос
?-perm([1,2,3],[4,5,6])
говорит, что «Да» :)

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
coffee
Юлия
Окт, 2008
Сообщений: 7
coffee url://forum.message:2989

Тогда подскажите, пожалуйста, каким образом должна работать программа: считать, сколько раз были переставлены элементы до тех пор, пока списки не стали равны, а потом проверять на четность полученное число? Или как формировать эти перестановки?

coffee
Юлия
Окт, 2008
Сообщений: 7
coffee url://forum.message:2993

Второй вариант, исправленный и дополненный=)

<?php domains
list=integer*

predicates
antilex
(list, list)
insertlast(list, integer, list)
pop(list, integer, list)
perm(list, list)
even_head(integer, list, integer, list, integer)
even(list, list, integer)
inv(integerintegerintegerintegerinteger)

clauses
insertlast
([], X, [X]).
insertlast([H|T], X, [H|R]):- insertlast(TXR).
pop([H|T1], X, [H|T2]):- pop(T1XT2).
pop([X|T], XT).
antilex([X], [X]).
antilex(L1L2):- pop(L1XT1), antilex(T1T2),
                  
insertlast(T2XL2).
perm(LL1):- antilex(LL1), even(LL1K), K=1.
even
([], [], 1).
even([H|T], [H1|T1], M):- even_head(HTH1T1K),
                          
even(TT1M1), M=M1*K
even_head(X, [], A, [], 1).
even_head(X, [H|T], X1, [H1|T1], P):- inv(XHX1H1K),
              
even_head(XTX1T1P1), P=K*P1.
inv(X,H,X1,H1,1):- X<HX1<H1,!.  
inv(X,H,X1,H1,-1):- X<HX1>H1,!.
inv(X,H,X1,H1,1):- X>HX1>H1,!.
inv(X,H,X1,H1,-1):- X>HX1<H1,!.           

?>

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Обмен электронных валют
money.dn.ua