wl

Unnamed repository; edit this file 'description' to name the repository.
git clone https://logand.com/git/wl.git/
Log | Files | Refs | LICENSE

commit 3d41ab29bd5f483d8f46aa7254327ef6e77cf85b
parent 204feba4ab5e7c78f5b67c490ba25930cdee9759
Author: tomas <tomas@logand.com>
Date:   Sun, 11 Oct 2009 22:07:19 +0200

pass, prin fix, more in lisp

Diffstat:
Mjava.wl | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mwl.java | 23++++++++++++++++++-----
2 files changed, 81 insertions(+), 9 deletions(-)

diff --git a/java.wl b/java.wl @@ -84,6 +84,17 @@ (NIL (eval (car X) 1) (run (cdr X) 1)) (up @ @) ) ) ) +(de case (C . L) + (up @ C) + (use X + (loop + (NIL L) + (setq X (pop 'L)) + (T (if (atom (car X)) + (or (=T (car X)) (= C (car X))) + (member C (car X)) ) + (run (cdr X) 1)) ) ) ) + (de prog P (run P 1)) (de prog1 (E . P) (up @ E) (run P 1) E) (de prog2 (E F . P) (up @ F) (run P 1) F) @@ -156,6 +167,53 @@ # (def 'K V) # (run L 1 '(K)) ) ) ) # TODO +(de reverse (L) + (let Z NIL + (while L + (push 'Z (pop 'L)) ) + Z ) ) + +(de member (I L) + (let X L + (loop + (T (atom L) (and (= I L) L)) + (T (= I (car L)) L) + (T (== X (setq L (cdr L)))) ) ) ) + +(de memq (I L) + (let X L + (loop + (T (atom L) (and (== I L) L)) + (T (== I (car L)) L) + (T (== X (setq L (cdr L)))) ) ) ) + +(de full (L) + (not (memq NIL L)) ) + +(de assoc (I L) + (loop + (NIL L) + (T (= I (caar L)) (car L)) + (pop 'L) ) ) + +(de asoq (I L) + (loop + (NIL L) + (T (== I (caar L)) (car L)) + (pop 'L) ) ) + +(de fin (X) + (loop + (NIL (pair X) X) + (pop 'X) ) ) + +(de last (L) + (ifn (pair L) + L + (while (pair (cdr L)) + (pop 'L) ) + (car L) ) ) + (de println @ (pass print) (prin "^J") ) @@ -164,8 +222,6 @@ (pass prin) (prin "^J") ) -# java - (de jclass (N) (java.lang.Class 'forName N)) (de gc () (`((jclass 'java.lang.Runtime) 'getRuntime) 'gc)) @@ -208,12 +264,15 @@ (NIL L Z) (setq Y (eval (pop 'L) 1)) (NIL Y) - (setq Z (Z 'reminder Y)) ) ) ) + (setq Z (Z 'remainder Y)) ) ) ) (de + @ (- (pass - 0))) +(de =0 (N) (when (= 0 N) N)) +(de n0 (N) (not(=0 N))) + (de jnum (X) - (jnew `(jclass 'java.math.BigInteger) (X ' toString)) ) + (jnew `(jclass 'java.math.BigInteger) (X 'toString)) ) (de heap @ (let R `((jclass 'java.lang.Runtime) 'getRuntime) diff --git a/wl.java b/wl.java @@ -526,6 +526,21 @@ class wl implements Runnable { } return eval(X, n, L); }}); + fn("pass", new Fn() {public Any fn(Any E) { + Any A = mkCons(NIL, NIL); + Any B = A; + E = E.cdr(); + while(E.isCons()) { + B = B.cdr(mkCons(E.car(), NIL)); + E = E.cdr(); + } + Any C = Args.val().cdr(); + while(C.isCons()) { + B = B.cdr(mkCons(mkCons(Qte, C.car()), NIL)); + C = C.cdr(); + } + return eval(A.cdr()); + }}); fn("quote", new Fn() {public Any fn(Any E) {return E.cdr();}}); fn("car", new Fn() {public Any fn(Any E) {return eval(E.cdr().car()).car();}}); fn("cdr", new Fn() {public Any fn(Any E) {return eval(E.cdr().car()).cdr();}}); @@ -591,11 +606,8 @@ class wl implements Runnable { PrintStream S = (PrintStream) Out.val().obj(); Any Z = NIL; int I = 0; - for(Any X = E.cdr(); NIL != X; X = X.cdr()) { - if(0 < I++) S.print(' '); - Z = eval(X.car()); - prin(Z); - } + for(Any X = E.cdr(); NIL != X; X = X.cdr()) + prin(eval(X.car())); return Z; }}); fn("pack", new Fn() {public Any fn(Any E) { @@ -932,6 +944,7 @@ class wl implements Runnable { wl X = new wl(); X.load("java.wl"); // TODO from args X.run(); + //(new Thread(new wl())).start(); } }