Поведение мета-предикатов `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).

С этими определениями вызов мета-предикатов с пустым списком просто не удался. Но это не позволяет отличить от случая, когда вызов не удается из-за одной из неявных целей, созданных из-за сбоя закрытия.

Если вы представляете себя с помощью этих мета-предикатов, считаете ли вы сбой в пустых списках приемлемым поведением или предпочитаете, чтобы в этом случае генерировалось исключение?

0 ответов

Другие вопросы по тегам