module Rubylog::DSL::Indicators

Public Class Methods

humanize_indicator(indicator) click to toggle source

Makes human-friendly output from the indicator For example, .and()

# File lib/rubylog/dsl/indicators.rb, line 5
def self.humanize_indicator indicator
  return indicator if String === indicator
  functor, arity = indicator
  if arity > 1
    ".#{functor}(#{ ','*(arity-2) })"
  elsif arity == 1
    ".#{functor}"
  elsif arity == 0
    ":#{functor}"
  end
end
unhumanize_indicator(indicator) click to toggle source

Makes internal representation from predicate indicator

For example, .and() becomes [:and,2]

# File lib/rubylog/dsl/indicators.rb, line 20
def self.unhumanize_indicator indicator
  case indicator
  when Array
    indicator
  when /\A:(\w+)\z/
    [:"#{$1}",0]
  when /\A\w*\.(\w+)\z/
    [:"#{$1}",1]
  when /\A\w*\.(\w+)\(\w*((,\w*)*)\)\z/
    [:"#{$1}",$2.count(",")+2]
  else
    raise ArgumentError, "invalid indicator: #{indicator.inspect}"
  end

end