我在用纸笔解决差异列表问题时遇到了问题,而不是在 SWI Prolog 的帮助下(这些天我正在准备我的逻辑编程考试)。
这是问题:
q(X) :- p(X - []).
p([X|Y] - Y).
p([X|Y] - Z) :- p(Y - [X|Z]).
明确给出查询 ?- q(t) 的所有基本项 t 的集合。成功。以封闭形式陈述集合的正式定义(即,不要使用递归定义)。
答案是:
{[t1, . . . , tn-1, tn, tn-1, . . . , t1] | n > 0, ti 是所有 i ∈ {1, . . . , n}}
我使用了 [1,2,3,2,1],它给了我真正的预期答案。
我不明白解决这个问题的步骤是什么?