/* Learning last/2 - finding the last element of a list */ /* Depending on the background knowledge used two definitions can be found - with and without conc/2 */ background([last/2, /*conc/3,*/ components/3]). /* without conc/3 */ propositional([[]]). /* Examples of the target predicate */ last(b,'[b]'). last(b,'[a,b]'). last(c,'[a,b,c]'). last(c,'[a,c]'). last(c,'[b,c]'). last(c,'[c]'). /* Background knowledge */ conc([],'[a,b,c]','[a,b,c]'). conc('[a]','[b,c]','[a,b,c]'). conc('[a,b]','[c]','[a,b,c]'). conc('[a,b,c]',[],'[a,b,c]'). conc([],'[a,b]','[a,b]'). conc('[a]','[b]','[a,b]'). conc('[a,b]',[],'[a,b]'). conc([],'[b,c]','[b,c]'). conc('[b]','[c]','[b,c]'). conc('[b,c]',[],'[b,c]'). conc([],'[a,c]','[a,c]'). conc('[a]','[c]','[a,c]'). conc('[a,c]',[],'[a,c]'). conc([],'[a]','[a]'). conc('[a]',[],'[a]'). conc([],'[b]','[b]'). conc('[b]',[],'[b]'). conc([],'[c]','[c]'). conc('[c]',[],'[c]'). conc([],[],[]). components('[a,b,c]',a,'[b,c]'). components('[a,b]',a,'[b]'). components('[b,c]',b,'[c]'). components('[a,c]',a,'[c]'). components('[a]',a,[]). components('[b]',b,[]). components('[c]',c,[]).