“foldl1 / 3”和“foldr1 / 3”元谓词在空列表中的行为

时间:2015-12-02 00:00:18

标签: prolog meta-predicate logtalk

寻求建议。我正在向Logtalk库添加foldl1/3foldr1/3元谓词。这些可以很容易地定义:

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 个答案:

没有答案