Prolog检查两个列表是否相同

时间:2016-12-01 01:07:37

标签: prolog

所以我需要写一个名为doubleAll7/2的prolog术语,它带有两个列表。如果对于第一个列表中出现的每7个,则程序返回true,第二个列表连续有两个sevens。 示例doubleAll7([1,7,1],[1,7,7,1])为true,但doubleAll7([1,2,7],[1,2,7])为false。

double7/2在列表中将所有出现的7次加倍并且效果很好。

由于某种原因,该程序始终返回false。

    doubleAll7([H1|T1],[H2,T2]) :-
    double7([H1|T1], L),
        L == [H2|T2].

    double7([],[]).
    double7([H|T], [H,H|Z]) :-
    H is 7,
    !,
    double7(T,Z).
    double7([H|T], [H|Z]) :-
    double7(T,Z).

1 个答案:

答案 0 :(得分:0)

有一个明显的错误:第一行

doubleAll7([H1|T1],[H2,T2])

应该是

doubleAll7([H1|T1],[H2|T2])

我的意思是:|而不是,作为H2T2之间的分隔符

但是,抱歉:我发现你的解决方案过于复杂。

您可以避免double7/2(您对double7的通话无效,因为如果我没错,则相当于

doubleAll7(L1, L2) :-
  double7(L1, L2).

),你可以避免is/2,你可以避免使用!,你可以将所有内容简化为

doubleAll7([], []).

doubleAll7([7 | T1], [7, 7 | T2]) :-
  doubleAll7(T1, T2).

doubleAll7([H | T1], [H | T2]) :-
  H \== 7,
  doubleAll7(T1, T2).