On 22/03/16 04:18, Edgaonkar, Shrirang wrote: > Similar to "once / 1" I would like to write "twice / 1" goal so that > the first solution backtracks and finds the second solution. I wish > to get both the solutions. In order to get two solutions (without recomputing the first), you need to store some information in a way that survives backtracks. The first idea that comes to my mind is to use assert and retract, that are standard and work in all Prolog compilers: :- dynamic previously_solved/0. twice(Goal):- call(Goal), (previously_solved -> !, retract(previously_solved) ; assert(previously_solved)). In ECLiPSe you can have better, reentrant code by using non-logical storage predicates: http://eclipseclp.org/doc/userman/umsroot050.html Best, Marco -- http://docente.unife.it/marco.gavanelliReceived on Tue Mar 22 2016 - 08:00:46 CET
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:21 CEST