module dryad/lib-ext/list
strategies
/**
* Force Cons/Nil behaviour for list traversals.
*/
all-consnil(s) =
if is-list then
[s | id]; [id | s] + []
else
all(s)
end
/**
* One that traverses lists as cons/nil.
*/
one-consnil(s) =
if is-list then
[s | id] <+ [id | s]
else
one(s)
end
strategies
topdown-consnil(s) =
rec rec(s; all-consnil(rec))
strategies
filter-zip(s : t * t -> t | ys) =
if ?[x | xtail] then
where(!ys => [y | ytail])
; if <s(|y)> x => t then
![t | <filter-zip(s|ytail)> xtail]
else
<filter-zip(s|ytail)> xtail
end
else
?[]
end
strategies
/**
* Foldl without tuples. Use term arguments.
*
* Current term: result for empty list.
*
* @param s Takes next element of list as term argument and
* intermediate result as current term.
*
* @type as List(a)
* @param as List to fold over.
*
* @type b -> b
*/
foldl(s : a * b -> b | as) =
if !as => [] then
id
else
where(!as => [a | as'])
; s(|a)
; foldl(s | as')
end
strategies
xtc-new-ffd =
new-temp-file => (f, fd)
; where(<assert(!TempFiles)> (f, ()))