Sed is a very simple-minded substitution and deletion
function, suggested by John Carroll, and inspired by the (vastly more
powerful) Unix utility of the same name. We suspect that it can be
defined in DATR itself but have not attempted to do so here. Like
Unix sed it declares its own separator character. The syntax is
Sed:< separator atom+ separator atom* separator atom*
The three separator tokens must be identical, the first two atom sequences can be anything except that neither may contain the separator character, the final atom sequence is unconstrained and may only be implicit (i.e., it only gets specified only through the regular DATR path extension mechanism). Invocations of Sed that violate these syntactic requirements fail.
Here are some examples:
Sed:</ a / e / a b ra c a d a b ra> = e b ra c e d e b ra. Sed:<- x y z - x z - x x z z y y x y z z y x> = x x z z y y x z z y x. Sed:<a b r a c a d a b r a> = d a c a. Spell: <> == Sed:</ hafta / have to />. UnSpell: <> == Sed:</ have to / hafta />. DeleteOne: <$x> == Sed:<| $x | |>. StripComma:<> == DeleteOne:<,>. DeleteTwo: <$x $y> == Sed:<| $x $y | |>. Transpose: <$x $y> == Sed:<| $x $y | $y $x |>.
One could imagine beefing this function up (regular expression syntax, named substrings of atoms, etc.) but even this minimal version looks like a very handy thing to have around.