Module: Porolog

Defined in:
lib/porolog.rb,
lib/porolog/goal.rb,
lib/porolog/rule.rb,
lib/porolog/error.rb,
lib/porolog/scope.rb,
lib/porolog/value.rb,
lib/porolog/arguments.rb,
lib/porolog/predicate.rb

Overview

lib/porolog/predicate.rb - Plain Old Ruby Objects Prolog Engine – Predicate

Luis Esteban   2 May 2018
  created

Defined Under Namespace

Classes: Arguments, Goal, PorologError, Predicate, Rule, Scope, Value

Constant Summary collapse

VERSION =

The most recent version of the Porolog gem.

'0.0.7'
VERSION_DATE =

The most recent date of when the VERSION changed.

'2019-06-18'

Instance Method Summary collapse

Instance Method Details

#predicate(*names) ⇒ Porolog::Predicate+

A convenience method to create a Predicate, along with a method that returns an Arguments based on the arguments provided to the method.

Parameters:

  • names (Array<#to_sym>)

    names of the Predicates to create.

Returns:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/porolog.rb', line 21

def predicate(*names)
  names = [names].flatten
  
  predicates = names.map{|name|
    method     = name.to_sym
    predicate  = Predicate.new(name)
    Object.class_eval{
      define_method(method){|*args|
        predicate.(*args)
      }
    }
    predicate
  }
  
  predicates.size > 1 && predicates || predicates.first
end