commit 784ec09a55ec28a69b5f88e809b451d2b0c62804
parent ca99dd99deb84fdb5175d5460ba0fdc431534612
Author: tomas <tomas@logand.com>
Date: Mon, 26 Oct 2009 23:18:54 +0100
job + inc dec implemented
Diffstat:
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/java.wl b/java.wl
@@ -459,3 +459,13 @@
(de abs (N) (if (lt0 N) (- N) N))
(de test (X . P) (println X (run P 1)))
+
+(de inc (X . @)
+ (if (num? X)
+ (1+ X)
+ (set X (+ (val X) (or (next) 1))) ) )
+
+(de dec (X . @)
+ (if (num? X)
+ (1- X)
+ (set X (- (val X) (or (next) 1))) ) )
diff --git a/wl.java b/wl.java
@@ -947,6 +947,32 @@ class wl implements Runnable {
} else err(E, "Don't know how to let");
return Z;
}});
+ fn("job", new Fn() {public Any fn(Any E) {
+ Any Z = NIL;
+ Any I = E.cdr();
+ Any J = eval(I.car());
+ if(J.isCons()) {
+ int n = 0;
+ Any L = J;
+ while(L.isCons()) {
+ Any C = L.car();
+ L = L.cdr();
+ bind(C.car(), C.cdr());
+ n++;
+ }
+ try {Z = xrun(I.cdr());}
+ finally {
+ L = J;
+ while(L.isCons()) {
+ Any C = L.car();
+ L = L.cdr();
+ C.cdr(C.car().val());
+ }
+ unbind(n);
+ }
+ } else err(E, "Don't know how to job");
+ return Z;
+ }});
fn("up", new Fn() {public Any fn(Any E) { // (up [cnt] sym ['val])
Any Z;
Any I = E.cdr();