【发布时间】:2016-05-29 23:01:19
【问题描述】:
我实现了获取列表子列表的函数,例如:
sublist([1,2,4], [1,2,3,4,5,1,2,4,6]).
true
sublist([1,2,4], [1,2,3,4,5,1,2,6]).
false
看看我的解决方案:
my_equals([], _).
my_equals([H1|T1], [H1|T2]) :- my_equals(T1, T2).
sublist([], _).
sublist(L1, [H2|T2]) :- my_equals(L1, [H2|T2]); sublist(L1, T2).
你能给我另一个解决方案吗?也许存在一些预定义的谓词 my_equals ?
【问题讨论】:
-
my_equals(L1, L2)将等同于append(L1, _, L2)。 -
比
my_equals更好的名字是prefix_of。 -
@lurker,如果我理解正确,请告诉我。实际上,
append(L1, _, L2)检查L1(整个)是否是L2的前缀。类似地,append(_, L1, L2)检查L1(整个)是否是L2的后缀。是吗? -
@HaskellFun 你明白了 :)
-
虽然我可能会更改术语,而不是说 checks 我会说 succeeds。所以,
append(_, L1, L2)成功 如果L1是L2的后缀。