Prolog - 递归函数总是返回false值

时间:2018-01-24 17:38:58

标签: recursion prolog

我习惯于实现一个递归函数来检查给定列表L是否以反向顺序写入:

orderIsReverse(L):-
    [X|Q]=L,
    [XP|_]=Q,
    (X<XP -> false; orderIsReverse(Q)),
    true.

但是,在编译代码并在SWI Prolog内提示orderIsReverse([3,2,1])后,我会返回false

代码有什么问题?

1 个答案:

答案 0 :(得分:1)

当输入列表为空时(以及当它包含一个单独的元素时,您需要处理这种情况,因为您需要两个用于比较)。

orderIsReverse([X1,X2|L]):-
  X1 > X2, orderIsReverse([X2|L]).
orderIsReverse([_]).
orderIsReverse([]).

更新:修复逻辑。