module dryad/lib-ext/wannabe-lisp
strategies
/**
* @todo Use accumulator when Stratego implements tail recursion
* @type List(a) -> List(b)
*/
mapcan(f : (a -> a) * a -> a) =
if ?[a | as] then
<f(<mapcan(f)> as)> a
else
?[]
end
mapcar(s) =
map(s)
mapcdr(s) =
rec x(?[_ | _]; s; [id | x] + ?[]; s)
car =
?[<id> | _]
cdr =
?[_ | <id>]
fetchcdr(s) =
rec x(?[_ | _]; s <+ [id | x])