我想知道一個序言,其中可能包括一個內置的通話是這樣的:Prolog的任何版本是否支持累加器的更高階抽象?
accum(generator, filter, accumulator)
Calculates all solutions to generator.
For each one, if filter can be proved, accumulator is proved.
Backtracks to find all solutions to filter and generator.
Accumulator may backtrack internally, but multiple proofs of accumulator are
conjoined, not backtracked.
因此,例如,要總結不使用遞歸的列表,你可以寫:
X is 0, accum(member(Val,List), True, X is X + Val).
是有沒有任何Prolog這個構造或等價物?請記住,我在Prolog中有點新手,可能會漏掉一些明顯的東西。
在水星裏,人們只會寫一個名爲accum的謂詞來做這件事。然而,你不能使用目標作爲參數(就像你在問題中所做的那樣),你必須改用lambda表達式。 –
@PaulBone結果取決於計算髮生器的所有解決方案。因此,最終,從Mercury的「解決方案」模塊中調用某些東西仍然是必需的,除非你想使用非邏輯功能(在這種情況下,副詞「簡單」不適用;))。 –