|
|
1.1 root 1: (setq SCCS-ucido "@(#)ucido.l 1.3 6/29/81")
2: ;
3: ; ucilisp do loop, this is a seperate file due to conflicts with
4: ; the franz lisp do function. To use this, one needs
5: ; to load this file in at run time. (And have calls to
6: ; do be close compiled in compiled code).
7: ;
8: ; NOTE: do is a macro and must be declared before calls to it
9: ; in code to be compiled!
10: ;
11: ; to compile this file: liszt ucido.l
12: ;
13: (declare (macros t))
14:
15: (eval-when (compile)
16: (load 'ucifnc))
17:
18: (defun do macro (l)
19: ((lambda (dotype alist)
20: (cond ((eq dotype 'while)
21: (dowhile (car alist) (cdr alist)))
22: ((eq dotype 'until)
23: (dowhile (list 'not (car alist))
24: (cdr alist)))
25: ((eq dotype 'for)
26: (dofor (car alist)
27: (cadr alist)
28: (caddr alist)
29: (cdddr alist)))
30: (t `((lambda ()
31: ,@alist)))))
32: (cadr l)
33: (cddr l)))
34:
35: (defun dowhile (expr alist)
36: `(prog (returnvar)
37: loop
38: (cond (,expr
39: (setq returnvar ((lambda ()
40: ,@alist)))
41: (go loop))
42: (t (return returnvar)))))
43:
44: (defun dofor (var fortype varlist stmlist)
45: (selectq fortype
46: (in `(prog (returnvar l1 l2)
47: (setq l2 ',varlist)
48: loop
49: (setq l1 (car l2))
50: (setq l2 (cdr l2))
51: (cond ((null l1)
52: (return returnvar)))
53: (setq returnvar
54: ((lambda (,var)
55: ,@stmlist)
56: (l1)))
57: (go loop)))
58: (on `(prog (returnvar l1 l2)
59: (setq l2 ',varlist)
60: loop
61: (cond ((null l2)
62: (return returnvar)))
63: (setq returnvar
64: ((lambda (,var)
65: ,@stmlist)
66: (l2)))
67: (setq l2 (cdr l2))
68: (go loop)))
69: (rpt `(prog (returnvar ,var)
70: (setq ,var 1)
71: loop
72: (cond ((not (> ,var ,varlist))
73: (setq returnvar ((lambda ()
74: ,@stmlist)))
75: (setq ,var (1+ ,var))
76: (go loop))
77: (t (return returnvar)))))
78: nil))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.