我需要知道如何比较Prolog中两个列表的长度。这就是我到目前为止所做的:
sum(N1,N2) :-
checklength(N1,N2).
checklength(N1,N2) :-
L1 is length(N1,What),
L2 is length(N2,What),
Comp(L1,L2).
Comp(L1,L2) :-
L1=:=L2.
答案 0 :(得分:9)
当然,CapelliC的答案是完美的,但您也可以尝试解决此问题的“标准”方法:
same_length([],[]).
same_length([_|L1],[_|L2]) :- same_length(L1, L2).
答案 1 :(得分:3)
如果您使用的是SWI-Prolog,那么您只需使用same_length/2
谓词。
答案 2 :(得分:2)
你可以使用统一:
checklength(N1,N2):-
length(N1,What),
length(N2,What).
只有当N1和N2具有相同的长度时,这才会成功。
Btw L1 is length(N1,What)
没有意义。 length / 2是谓词,而不是函数。
也就是说,它会成功或失败,但不会“返回”一个值。
Otoh,是/ 2期望算术表达式为右操作数。
修改的
checklength(N1,N2,R1,R2):-
length(N1,L1),
length(N2,L2),
( L1 < L2
-> lpad(L1,L2,N1,R1), R2 = N2
; L2 < L1
-> lpad(L2,L1,N2,R2), R1 = N1
; (R1,R2) = (N1,N2)
).
lpad(A,A,L,L) :- !.
lpad(A,B,L,[0|T]) :- A < B, C is A+1, lpad(C,B,L,T).