aboutsummaryrefslogtreecommitdiff
path: root/src/boot/utility.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot/utility.boot')
-rw-r--r--src/boot/utility.boot19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/boot/utility.boot b/src/boot/utility.boot
index 5b870a6d..6e08acb5 100644
--- a/src/boot/utility.boot
+++ b/src/boot/utility.boot
@@ -48,7 +48,8 @@ module utility (objectMember?, symbolMember?, stringMember?,
lastNode, append, append!, copyList, substitute, substitute!,
setDifference, setUnion, setIntersection,
symbolAssoc, applySubst, applySubst!, applySubstNQ, objectAssoc,
- remove,removeSymbol,atomic?,copyTree,finishLine) where
+ remove, removeSymbol, atomic?, every?, any?, takeWhile, copyTree,
+ finishLine) where
substitute: (%Thing,%Thing,%Thing) -> %Thing
substitute!: (%Thing,%Thing,%Thing) -> %Thing
append: (%List %Thing,%List %Thing) -> %List %Thing
@@ -63,6 +64,9 @@ module utility (objectMember?, symbolMember?, stringMember?,
setUnion: (%List %Thing,%List %Thing) -> %List %Thing
setIntersection: (%List %Thing,%List %Thing) -> %List %Thing
atomic?: %Thing -> %Boolean
+ every?: (%Thing -> %Thing, %List %Thing) -> %Thing
+ any?: (%Thing -> %Thing, %List %Thing) -> %Thing
+ takeWhile: (%Thing -> %Thing, %List %Thing) -> %List %Thing
copyTree: %Thing -> %Thing
finishLine: %Thing -> %Void
--FIXME: Next signature commented out because of GCL bugs
@@ -77,6 +81,19 @@ module utility (objectMember?, symbolMember?, stringMember?,
atomic? x ==
x isnt [.,:.] or x.op is 'QUOTE
+++ Return the last image of `f' if all images of elements in `l'
+++ are non-nil. Otherwise return nil.
+every?(f,l) ==
+ and/[apply(f,x,nil) for x in l]
+
+++ Return the first non-nil image of `f' of elements in `l'.
+any?(f,l) ==
+ or/[apply(f,x,nil) for x in l]
+
+++ Return the sublist of `l' whose elements have non-nil image by `f'.
+takeWhile(f,l) ==
+ [x for x in l while apply(f,x,nil)]
+
copyTree t ==
t is [.,:.] => [copyTree first t,:copyTree rest t]
t