Поведение мета-предикатов `foldl1/3` и`foldr1/3` в пустых списках
Ищу совет. Я добавляю foldl1/3
а также foldr1/3
мета-предикаты для библиотеки Logtalk. Их можно легко определить:
foldl1(Closure, [Head| Tail], Result) :-
foldl(Closure, Head, Tail, Result).
foldr1(Closure, [Head| Tail], Result) :-
foldr1_(Tail, Head, Closure, _, Result).
foldr1_([], Result, _, Result, Result).
foldr1_([Arg2| Args], Arg1, Closure, Acc, Result) :-
foldr1_(Args, Arg2, Closure, Acc, Acc2),
call(Closure, Arg1, Acc2, Result).
С этими определениями вызов мета-предикатов с пустым списком просто не удался. Но это не позволяет отличить от случая, когда вызов не удается из-за одной из неявных целей, созданных из-за сбоя закрытия.
Если вы представляете себя с помощью этих мета-предикатов, считаете ли вы сбой в пустых списках приемлемым поведением или предпочитаете, чтобы в этом случае генерировалось исключение?