Я не могу четко понять использование сокращения. Например, в этом случае: сглаживание, действительно ли это нужно? У меня это работает даже без обоих предикатов cut (я пробовал удалить). В каких случаях может происходить возврат к разрезу? Убирая надрезы, вы получаете ту же реализацию из книги «Искусство пролога» (Шапиро Э., Стерлинг Л.), а именно:
flatten([X|Xs],Ys) :-
flatten(X,Ysl),
flatten(Xs,Ys2),
append(Ys1,Ys2,Ys).
flatten(X,[X]) :-
constant(X),
X\=[].
flatten([],[]).
что приводит меня к другому вопросу: нужно ли во втором предложении проверять, не является ли это списком? Если это один термин, который не сочетается с первым предложением ... не так ли?
constant/1
? Это то же самое, чтоatomic/1
? - person Sergey Kalinichenko   schedule 14.09.2015