我无法清楚地理解 cut 的用法。例如在这种情况下:flatten,真的需要吗?即使没有两个切谓词,它也对我有用(我尝试删除)。哪些情况会导致回溯进入cut?删除剪辑后,您对“序言的艺术”(Shapiro E.,Sterling L.)一书具有相同的实现,即:
flatten([X|Xs],Ys) :-
flatten(X,Ysl),
flatten(Xs,Ys2),
append(Ys1,Ys2,Ys).
flatten(X,[X]) :-
constant(X),
X\=[].
flatten([],[]).
这引出了另一个问题:是否有必要在第二个子句中检查它是否不是列表?如果它是一个单独的术语将不会与第一个子句统一......不是吗?