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


Автор: masta 25.4.2007, 13:22
Сталкнулся с такой проблемой: нужно на ProLog-e написать програму у которой на входе будет список, а на выходе она будет говорить являеться ли этот список полиндромом, тоесть читаеться одинаково как справо-налево так и слево-направо например [a,b,c,b,a]. Если кто знает помогите пожалуйста, а то я уже все перерыл а ответ так и не нашол.

Автор: setq 25.4.2007, 13:35
Prolog'а не знаю, но наверно там должна быть рекурсия наподобие "список -- палиндром, если первый и последний элементы равны и всё что между ними тоже палиндром (или пустой список)".

Автор: Artemios 25.4.2007, 22:03
Цитата(setq @  25.4.2007,  14:35 Найти цитируемый пост)
Prolog'а не знаю, но наверно там должна быть рекурсия наподобие "список -- палиндром, если первый и последний элементы равны и всё что между ними тоже палиндром (или пустой список)". 

Угу, именно так.

masta, 
Код

конкатенация([],Ys,Ys).
конкатенация([X|Xs],Ys,[X|Zs]):-
    конкатенация(Xs,Ys,Zs).

палиндром([]).
палиндром([_]).
палиндром([X|Xs]):-
    конкатенация(Ys,[X],Xs),
    палиндром(Ys).


Или если в твоей Пролог-системе есть встроенный предикат append, то можно короче:
Код

палиндром([]).
палиндром([_]).
палиндром([X|Xs]):-
    append(Ys,[X],Xs),
    палиндром(Ys).


а если твой Пролог не понимает русских названий предикатов, то перепиши "палиндром" латинскими буквами.

Проверяю на своем Прологе (swi-prolog):
Цитата

?- палиндром("арозаупаланалапуазора").
Yes
?- палиндром("простослово").
No
?-


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