| kind | = | "Message Rewriter" |
Mimics
Inactive cells
Active cells
Specs
Inactive cells (details)
Active cells (details)
nil
[ show source ]
method(msg, pattern, recurse false,
start = nil
current = nil
m_msg = msg
while(m_msg,
oldArguments = m_msg arguments
if(recurse &&(!(Unification internal:literal?(m_msg))),
m_msg arguments = m_msg arguments map(mm,
if(Unification internal:literal?(mm),
mm,
rewrite(mm, pattern, true))))
m = match(m_msg, pattern key)
result = if(m,
rewriteWith(m, pattern value),
m_msg mimic
)
m_msg arguments = oldArguments
if(start nil?,
start = result
current = start last,
current ->(result)
current = current last
)
if(m,
m nexts times(if(m_msg, m_msg = m_msg next)),
m_msg = m_msg next)
)
start
)
nil
[ show source ]
method(u, pattern,
start = nil
current = nil
p = pattern
while(p,
res = if(p symbol?,
(msg, count) = u unifications [](p name)
res = msg mimic
curr = msg
(1 ...(count)) each(n,
curr = curr next
newObj = curr mimic
res last ->(newObj)
)
res,
p mimic)
unless(u internal:literal?(res),
res arguments = p arguments map(a,
rewriteWith(u, a)))
if(start nil?,
start = res
current = start,
current last ->(res)
current = current last)
p = p next
)
start
)