Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.
Автор | Сообщение |
Окт, 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_list, int_list) even_head(integer, int_list, integer, int_list, integer) even(int_list, int_list, integer) inv(integer, integer, integer, integer, integer)
clauses perm(L, L1):- even(L, L1, K), K=1. even([], [], 1). even([H|T], [H1|T1], M):- even_head(H, T, H1, T1, K), even(T, T1, M1), M=M1*K. even_head(X, [], A, [], 1). even_head(X, [H|T], X1, [H1|T1], P):- inv(X, H, X1, H1, K), even_head(X, T, X1, T1, P1), P=K*P1. inv(X, H, X1, H1, 1):- X<H, X1<H1,!. inv(X, H, X1, H1,-1):- X<H, X1>H1,!. inv(X, H, X1, H1, 1):- X>H, X1>H1,!. inv(X, H, X1, H1, -1):-X>H, X1<H1,!. ?>
Это сообщение было отредактировано coffee 19.12.09 18:02. |
|
Июл, 2004 Сообщений: 923 | popoff url://forum.message:2988 запрос ?-perm([1,2,3],[4,5,6]) говорит, что «Да» :) ________________________________ Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить. |
|
Окт, 2008 Сообщений: 7 | coffee url://forum.message:2989 Тогда подскажите, пожалуйста, каким образом должна работать программа: считать, сколько раз были переставлены элементы до тех пор, пока списки не стали равны, а потом проверять на четность полученное число? Или как формировать эти перестановки? |
|
Окт, 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(integer, integer, integer, integer, integer)
clauses insertlast([], X, [X]). insertlast([H|T], X, [H|R]):- insertlast(T, X, R). pop([H|T1], X, [H|T2]):- pop(T1, X, T2). pop([X|T], X, T). antilex([X], [X]). antilex(L1, L2):- pop(L1, X, T1), antilex(T1, T2), insertlast(T2, X, L2). perm(L, L1):- antilex(L, L1), even(L, L1, K), K=1. even([], [], 1). even([H|T], [H1|T1], M):- even_head(H, T, H1, T1, K), even(T, T1, M1), M=M1*K. even_head(X, [], A, [], 1). even_head(X, [H|T], X1, [H1|T1], P):- inv(X, H, X1, H1, K), even_head(X, T, X1, T1, P1), P=K*P1. inv(X,H,X1,H1,1):- X<H, X1<H1,!. inv(X,H,X1,H1,-1):- X<H, X1>H1,!. inv(X,H,X1,H1,1):- X>H, X1>H1,!. inv(X,H,X1,H1,-1):- X>H, X1<H1,!.
?>
|
|
Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.