【发布时间】:2013-11-18 02:01:17
【问题描述】:
我遇到了一个问题。我想知道是否可以得到一些帮助。
设计一个谓词 bookends/3 来测试第一个列表参数是否为 第三个的前缀和第二个是第三个的后缀。注意 第一个和第二个参数中的列表可能重叠。
示例输出
?-bookends([1],[3,4,5],[1,2,3,4,5]).
true.
?-bookends([],[4],[1,2,3,4]).
true.
?-bookends([1,2,3],[3,4],[1,2,3,4]).
true.
?-bookends([1],[2,3],[1,2,3,4]).
false.
目前为止我所拥有的
suffix(Suffix,Suffix).
prefix([_|L],Suffix):- suffix(L,Suffix).
bookends([],[],[]).
bookends([X|L],[X|L1],[X|L2]):-
prefix(L,L2),
suffix(L1,L2).
我如何让后缀工作,或者我接近这个错误?
【问题讨论】:
-
bookends([1,2,3],[3,4,5],[1,2,3,4,5]).应该是真还是假?如果你允许这样的重叠,那么你可以使用bookends(A, B, C) :- append(A, _, C), append(_, B, C). -
@mbratch:非常漂亮。 (只是投赞成票并不公平)