所以我需要写一个名为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).
答案 0 :(得分:0)
有一个明显的错误:第一行
doubleAll7([H1|T1],[H2,T2])
应该是
doubleAll7([H1|T1],[H2|T2])
我的意思是:|
而不是,
作为H2
和T2
之间的分隔符
但是,抱歉:我发现你的解决方案过于复杂。
您可以避免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).