ich über einen Prolog fragen, die einen eingebauten in Aufruf wie folgt umfassen könnte:Unterstützt eine Version von Prolog eine Abstraktion höherer Ordnung von Akkumulatoren?
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.
So zum Beispiel eine Liste zusammenzufassen, ohne Rekursion Sie schreiben konnte:
X is 0, accum(member(Val,List), True, X is X + Val).
Ist Gibt es einen Prolog mit diesem Konstrukt oder ein Äquivalent? Bedenken Sie, dass ich bei Prolog ein bisschen Neuling bin und vielleicht etwas Offensichtliches vermisse.
In Merkur würde man einfach ein Prädikat namens accum schreiben, das dies tut.Da Sie jedoch keine Ziele als Parameter verwenden können (wie Sie es in der Frage getan haben), müssen Sie stattdessen lambdas verwenden. –
@PaulBone Das Ergebnis hängt von der Berechnung aller Lösungen für den Generator ab. Letztendlich wird es also immer noch erforderlich sein, etwas aus Mercurys "solutions" -Modul aufzurufen, es sei denn, Sie möchten nicht-logische Funktionen verwenden (in diesem Fall gilt das Adverb "einfach" nicht;)). –