Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Как реализовать полный проход по списку


Автор: vibor75 29.2.2016, 08:54
Есть код на Amzi-prolog:
Код

price(Arg,[],[]).
price(Arg,[H|T],T1):-
    arg(2,H,Ha),
    Arg \= Ha,!,
    price(Arg,T,T1).
price(Arg,[H|T],[H|T1]):-
    price(Arg,T,T1).
    
suit(Arg,[],[]).
suit(Arg,[H|T],T1):-
    arg(1,H,Ha),
    Arg \= Ha,!,
    suit(Arg,T,T1).
suit(Arg,[H|T],[H|T1]):-
    suit(Arg,T,T1).        

length([], 0).
length([H|T], N):-
    length(T, M),
    N is M+1.
    
append([],L,L).
append([X|L1],L2,[X|L3]):-
    append(L1,L2,L3).
    
reverse([],[]).
reverse([X|L1],L2):-
    reverse(L1,L3),
    append(L3,[X],L2).
    
sort_reverse([],[]).
sort_reverse(L,M):-
    sort(L,L1),
    reverse(L1,M).
    
joker_num([],0).
joker_num([H|T],N):-
    arg(1,H,K),
    K=joker,
    joker_num(T,N1),
    N is N1 + 1;
    arg(1,H,K),
    K \= joker,
    joker_num(T,N).
    
row([H|T],Row):-
    arg(1,H,Arg),
    suit(Arg,[H|T],TRow),
    length(TRow,N),
    N>=3,
    sort_reverse(TRow,Row);
    arg(2,H,Arg),
    price(Arg,[H|T],Row),
    length(Row,N),
    N>=3.


Как реализовать рекурсию в предикате row чтобы строились все возможные комбинации?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)