Turbo Prolog:使用递归创建回文

时间:2018-12-11 09:22:31

标签: recursion palindrome visual-prolog

我写了一个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谓词替换为将使用递归而不是反转列表的谓词。

0 个答案:

没有答案