Current section

Files

Jump to
wongi_engine lib wongi engine action generator.ex
Raw

lib/wongi/engine/action/generator.ex

defmodule Wongi.Engine.Action.Generator do
@moduledoc false
alias Wongi.Engine.WME
defstruct [:template]
def new(s, p, o) do
%__MODULE__{
template: WME.new(s, p, o)
}
end
defimpl Wongi.Engine.Action do
alias Wongi.Engine.DSL.Var
alias Wongi.Engine.Rete
def execute(%@for{template: template}, token, rete) do
wme =
[:subject, :predicate, :object]
|> Enum.map(fn field ->
case template[field] do
%Var{name: name} -> token[name]
literal -> literal
end
end)
|> WME.new()
# consistency check
Rete.assert(rete, wme, token)
end
def deexecute(_, _, rete) do
rete
end
end
end