database( { mother( Child:string, Mother:string ), father( Child:string, Father:string ), orphan( Person:string ), french( Person:string ) } ). % % meta_pred_list( $ConstraintList, $VariableList, BindingList ) % % ConstraintList = a list of literals in the form of functors or % a list of lists of literals % VariableList = a list of variables to be returned % BindingList = a list of binding corresponding to each variable % in VariableList % % The functor ldl_var(Term) used in ConstraintList and VariableList % of the meta_pred_list/3 is interpreted as a LDL variable. % /* Run the following queries query call( parent(ldl_var(1), ldl_var(2)), [ ldl_var(1), ldl_var(2) ], Binding ) query call( parent(liz, ldl_var(1)), [ ldl_var(1) ], Binding ) query meta_parent(X, Y) query meta_parent(liz, X) */ export call($Pred, $VarList, Binding). export meta_parent(X, Y). export meta_parent($X, Y). export meta_parent(X, $Y). export meta_parent($X, $Y). % % call($Pred, $VarList, Binding) % call(Pred, VarList, Binding) <- meta_pred_list( [Pred], VarList, Binding ). % % meta_parent(X, Y) % meta_parent(X, Y) <- meta_pred_list( [ [father(ldl_var(1), ldl_var(2))], [mother(ldl_var(1), ldl_var(2))] ], [ ldl_var(1), ldl_var(2) ], [ X, Y ] ). % % parent(Child, Parent) % Parent is either the mother or the father of Child. % parent(Child, Father) <- father(Child, Father). parent(Child, Mother) <- mother(Child, Mother).