Class: RDF::N3::Algebra::List::Append

Inherits:
RDF::N3::Algebra::ListOperator show all
Defined in:
lib/rdf/n3/algebra/list/append.rb

Overview

Iff the subject is a list of lists and the concatenation of all those lists is the object, then this is true. The object can be calculated as a function of the subject.

The object can be calculated as a function of the subject.

Examples:

( (1 2) (3 4) ) list:append (1 2 3 4).

Constant Summary collapse

NAME =
:listAppend
URI =
RDF::N3::List.append

Instance Attribute Summary

Attributes included from Enumerable

#existentials, #universals

Instance Method Summary collapse

Methods inherited from RDF::N3::Algebra::ListOperator

#as_literal, #execute, #input_operand

Methods included from Builtin

#each, #evaluate, #hash, #input_operand, #rank, #to_uri

Instance Method Details

#resolve(list) ⇒ RDF::Term

Resolves this operator using the given variable bindings. If the last operand is a variable, it creates a solution for each element in the list.

Parameters:

Returns:

See Also:

  • ListOperator#evaluate


20
21
22
23
24
25
# File 'lib/rdf/n3/algebra/list/append.rb', line 20

def resolve(list)
  flattened = list.to_a.map(&:to_a).flatten
  # Bind a new list based on the values, whos subject use made up from original list subjects
  subj = RDF::Node.intern(list.map(&:subject).hash)
  RDF::N3::List.new(subject: subj, values: flattened)
end

#validate(list) ⇒ Boolean

The list argument must be a pair of literals.

Parameters:

Returns:

  • (Boolean)

See Also:

  • ListOperator#validate


33
34
35
36
37
38
39
40
# File 'lib/rdf/n3/algebra/list/append.rb', line 33

def validate(list)
  if super && list.to_a.all? {|li| li.list?}
    true
  else
    log_error(NAME) {"operand is not a list of lists: #{list.to_sxp}"}
    false
  end
end