Le të themi se kam rregullin e mëposhtëm në Prolog (Unë jam duke përdorur SWI-Prolog):
rule :-
subrule_1 ;
subrule_2 ;
subrule_3 ;
...
subrule_n.
Pra, "rregulli" ka sukses sa herë që e bën një nga nën-rregullat. E di që sapo një nënrregull të ketë sukses, të tjerët nuk do të ekzekutohen. Ajo që dua të bëj është të shtoj funksionalitetin në mënyrë që të ekzekutohen TË GJITHA nënrregullat dhe të krijoj një listë të nënrregullave që kanë pasur sukses. Por "rregulli" duhet të dështojë kur asnjë nuk ka sukses. Deri tani kjo është gjithçka që mund të mendoj:
...
rule(Successes), % This is the external call
...
Dhe rregulli është:
rule(Succeed_List) :-
L1 = [],
((subrule_1 -> append(L1,['subrule_1'],L2) ; L2 = L1) ,
(subrule_2 -> append(L2,['subrule_2'],L3) ; L3 = L2) ,
...
(subrule_n -> append(Ln,['subrule_n'],Succeed_List) ; Succeed_List = Ln)),
\+ length(Succeed_List,0).
Sigurisht që duhet të ketë një mënyrë më të mirë për ta bërë këtë! Po mendoja të përdorja "bagof" por nuk jam i sigurt se si do të funksiononte. Pyetja ime është, cila është një mënyrë më e mirë për të zbatuar rregullin e mësipërm?
Për ata që pyesin "çfarë në tokë mund të jenë ato nënrregulla", unë po heq shumë detaje këtu në lidhje me atë që po përpiqem të bëj. Nëse doni të dini, çdo nënrregull ka një argument, të njëjtë për secilin. Është një term me arit 8, por çdo argument është një atom tashmë i lidhur. Nënrregullat shqyrtojnë argumentet e termit.