def call *args
      # catch cuts
      catch :rubylog_cut do

        # for each rule
        each do |rule|
          # compile
          rule = rule.rubylog_match_variables

          # unify the head with the arguments
          rule.head.args.rubylog_unify(args) do
            # call the body
            rule.body.prove do
              yield 
            end
          end
        end
      end
    end
def call *args
      # catch cuts
      catch :rubylog_cut do

        # for each rule
        each do |rule|
          # compile
          rule = rule.rubylog_match_variables

          # unify the head with the arguments
          rule.head.args.rubylog_unify(args) do
            # call the body
            rule.body.prove do
              yield 
            end
          end
        end
      end
    end
accepts the *args of the called structure