defmodule Retex.Wme do
@moduledoc """
A working memory element, it represent the world in the form of identifier, attribute and values
timestamp is set at time of insertion into retex
"""
@type wme_identifier() :: String.t() | atom()
@type attribute() :: String.t() | atom()
@type id() :: String.t() | number()
@type value() :: any()
@type t :: %__MODULE__{
identifier: wme_identifier(),
attribute: attribute(),
id: id(),
timestamp: number(),
value: value()
}
defstruct identifier: nil, attribute: nil, value: nil, id: nil, timestamp: nil
alias Retex.Fact.HasAttribute
def new(id, attr, val) do
item = %__MODULE__{identifier: id, attribute: attr, value: val}
Map.put(item, :id, Retex.hash(item))
end
def to_has_attribute(%Retex.Wme{} = wme) do
%__MODULE__{identifier: id, attribute: attr, value: val} = wme
HasAttribute.new(owner: id, attribute: attr, predicate: :==, value: val)
end
end