我写了一个Prolog程序来检查列表是否是回文,如果不是,则创建回文。该程序将列表反转,并将其添加到创建回文的原始列表中。
domains
list = char*
predicates
rev (list, list, list)
reverse (list, list)
palindrome (list, list)
append (list, list, list)
del (list, list)
clauses
rev ([H|T], A, R) :- rev (T, [H|A], R).
rev ([], A, A).
reverse (L, R) :- rev (L, [], R).
del ([_|L1], L1).
palindrome (L, L) :-
reverse (L, L).
palindrome (L, Res) :-
reverse (L, R),
del (R, R1),
append (L, R1, Res).
append ([], L, L).
append ([X|L1], L2, [X|L3]) :-
append(L1, L2, L3).
但是我需要将palindrome
谓词替换为将使用递归而不是反转列表的谓词。