в предыдущей записи спросили насчет Prolog (разработан в 1972м) и Рефал (разработан в 1966м Турчиновым), то решил показать наглядно разницу
вот программа вычисления палиндрома на Рефал (
из википедии)
Palindrom {
s.1 e.2 s.1 =
;
s.1 = True ;
= True;
e.1 = False ;
}
достаточно компактно, видно, что язык имеет паттернматчинг и доступ к отдельным символам
накидал аналог на Prolog
% получить список без последнего элемента, вспомогательное описание того что понимаем под серединой слова
отброситьПоследний([Символ],[],Символ):-!.
отброситьПоследний([Символ1,Символ2],[Символ1],Символ2):-!.
отброситьПоследний([Символ|Хвост],Результат,Отброшенный):-Результат=Символ|БезПоследнего],отброситьПоследний(Хвост,БезПоследнего,Отброшенный).
% проверить на палиндром
палиндром([Символ]) :- !.
палиндром([Символ,Символ]) :- !.
палиндром([Символ|Хвост]) :- отброситьПоследний(Хвост,Середина,Отброшенный), Символ = Отброшенный, палиндром(Середина).
?- atom_chars('aabbccddeeffttttffeeddccbbaa',Chars),палиндром(Chars).
Prolog в отличии от РЕФАЛ работает скорее с деревьями и получить доступ к чему то лежащему не в нечале, не столь просто как в РЕФАЛ и надо описать компьютеру что мы понимаем под понятием "середина слова" скажем. Понимаени программы на Prolog весьма просто и для незнающего программирование на этом языке, достаточно узнать, что ':-' это ЕСЛИ, ':-!.' это НЕ ИЩИ ДАЛЬШЕ, а ',' это И