diff options
| author | Bdale Garbee <bdale@gag.com> | 2018-02-12 16:38:57 -0700 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2018-02-12 16:38:57 -0700 | 
| commit | ee79a205e118ea8730a02cc327d8fb79cc5f74ff (patch) | |
| tree | be0b0c9fbccaa84acadb1d18688aae9b8db3e048 /src/scheme/tiny-test/ao_scheme_tiny_const.scheme | |
| parent | 365eee3ebfe73204033089b363687228f97e5d98 (diff) | |
| parent | 78a90fc760b88ab66c5c238289afc38356e29d8a (diff) | |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'src/scheme/tiny-test/ao_scheme_tiny_const.scheme')
| -rw-r--r-- | src/scheme/tiny-test/ao_scheme_tiny_const.scheme | 389 | 
1 files changed, 0 insertions, 389 deletions
| diff --git a/src/scheme/tiny-test/ao_scheme_tiny_const.scheme b/src/scheme/tiny-test/ao_scheme_tiny_const.scheme deleted file mode 100644 index d0c0e578..00000000 --- a/src/scheme/tiny-test/ao_scheme_tiny_const.scheme +++ /dev/null @@ -1,389 +0,0 @@ -; -; Copyright © 2016 Keith Packard <keithp@keithp.com> -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation, either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -; General Public License for more details. -; -; Lisp code placed in ROM - -					; return a list containing all of the arguments -(def (quote list) (lambda l l)) - -(def (quote def!) -     (macro (a b) -	    (list -	     def -	     (list quote a) -	     b) -	    ) -     ) - -(begin - (def! append -   (lambda args -	  (def! a-l -	    (lambda (a b) -	      (cond ((null? a) b) -		    (else (cons (car a) (a-l (cdr a) b))) -		    ) -	      ) -	    ) -	     -	  (def! a-ls -	    (lambda (l) -	      (cond ((null? l) l) -		    ((null? (cdr l)) (car l)) -		    (else (a-l (car l) (a-ls (cdr l)))) -		    ) -	      ) -	    ) -	  (a-ls args) -	  ) -   ) - 'append) - -(append '(a b c) '(d e f) '(g h i)) - -					; -					; Define a variable without returning the value -					; Useful when defining functions to avoid -					; having lots of output generated. -					; -					; Also accepts the alternate -					; form for defining lambdas of -					; (define (name a y z) sexprs ...)  -					; - -(begin - (def (quote define) -   (macro (a . b) -					; check for alternate lambda definition form - -	  (cond ((list? a) -		 (set! b -		       (cons lambda (cons (cdr a) b))) -		 (set! a (car a)) -		 ) -		(else -		 (set! b (car b)) -		 ) -		) -	  (cons begin -		(cons -		 (cons def -		       (cons (cons quote (cons a '())) -			     (cons b '()) -			     ) -		       ) -		 (cons -		  (cons quote (cons a '())) -		  '()) -		 ) -		) -	  ) -   ) - 'define - ) - -					; basic list accessors - -(define (caar l) (car (car l))) - -(define (cadr l) (car (cdr l))) - -(define (cdar l) (cdr (car l))) - -(define (caddr l) (car (cdr (cdr l)))) - -					; (if <condition> <if-true>) -					; (if <condition> <if-true> <if-false) - -(define if -  (macro (test . args) -    (cond ((null? (cdr args)) -	   (list cond (list test (car args))) -		) -	  (else -	   (list cond -		 (list test (car args)) -		 (list 'else (cadr args)) -		 ) -	   ) -	  ) -    ) -  ) - -(if (> 3 2) 'yes) -(if (> 3 2) 'yes 'no) -(if (> 2 3) 'no 'yes) -(if (> 2 3) 'no) - -					; simple math operators - -(define zero? (macro (value) (list eqv? value 0))) - -(zero? 1) -(zero? 0) -(zero? "hello") - -(define positive? (macro (value) (list > value 0))) - -(positive? 12) -(positive? -12) - -(define negative? (macro (value) (list < value 0))) - -(negative? 12) -(negative? -12) - -(define (abs a) (if (>= a 0) a (- a))) - -(abs 12) -(abs -12) - -(define max (lambda (a . b) -		   (while (not (null? b)) -		     (cond ((< a (car b)) -			    (set! a (car b))) -			   ) -		     (set! b (cdr b)) -		     ) -		   a) -  ) - -(max 1 2 3) -(max 3 2 1) - -(define min (lambda (a . b) -		   (while (not (null? b)) -		     (cond ((> a (car b)) -			    (set! a (car b))) -			   ) -		     (set! b (cdr b)) -		     ) -		   a) -  ) - -(min 1 2 3) -(min 3 2 1) - -(define (even? a) (zero? (% a 2))) - -(even? 2) -(even? -2) -(even? 3) -(even? -1) - -(define (odd? a) (not (even? a))) - -(odd? 2) -(odd? -2) -(odd? 3) -(odd? -1) - - -(define (list-tail a b) -  (if (zero? b) -      a -    (list-tail (cdr a (- b 1))) -    ) -  ) - -(define (list-ref a b) -  (car (list-tail a b)) -  ) - -(define (list-tail a b) -  (if (zero? b) -      a -    (list-tail (cdr a) (- b 1)))) - -(list-tail '(1 2 3) 2) - -(define (list-ref a b) (car (list-tail a b))) - -(list-ref '(1 2 3) 2) -     - -					; define a set of local -					; variables one at a time and -					; then evaluate a list of -					; sexprs -					; -					; (let* (var-defines) sexprs) -					; -					; where var-defines are either -					; -					; (name value) -					; -					; or -					; -					; (name) -					; -					; e.g. -					; -					; (let* ((x 1) (y)) (set! y (+ x 1)) y) - -(define let* -  (macro (a . b) - -					; -					; make the list of names in the let -					; - -	 (define (_n a) -	   (cond ((not (null? a)) -		  (cons (car (car a)) -			(_n (cdr a)))) -		 (else ()) -		 ) -	   ) - -					; the set of expressions is -					; the list of set expressions -					; pre-pended to the -					; expressions to evaluate - -	 (define (_v a b) -	   (cond ((null? a) b)		 (else -		  (cons -		   (list set -			 (list quote -			       (car (car a)) -			       ) -			 (cond ((null? (cdr (car a))) ()) -			       (else (cadr (car a)))) -			 ) -		   (_v (cdr a) b) -		   ) -		  ) -		 ) -	   ) - -					; the parameters to the lambda is a list -					; of nils of the right length - -	 (define (_z a) -	   (cond ((null? a) ()) -		 (else (cons () (_z (cdr a)))) -		 ) -	   ) -					; build the lambda. - -	 (cons (cons lambda (cons (_n a) (_v a b))) (_z a)) -	 ) -     ) - -(let* ((a 1) (y a)) (+ a y)) - -(define let let*) -					; recursive equality - -(define (equal? a b) -  (cond ((eq? a b) #t) -	((pair? a) -	 (cond ((pair? b) -		(cond ((equal? (car a) (car b)) -		       (equal? (cdr a) (cdr b))) -		      ) -		) -	       ) -	 ) -	) -  ) - -(equal? '(a b c) '(a b c)) -(equal? '(a b c) '(a b b)) - -(define member (lambda (obj a . test?) -		      (cond ((null? a) -			     #f -			     ) -			    (else -			     (if (null? test?) (set! test? equal?) (set! test? (car test?))) -			     (if (test? obj (car a)) -				 a -			       (member obj (cdr a) test?)) -			     ) -			    ) -		      ) -  ) - -(member '(2) '((1) (2) (3))) - -(member '(4) '((1) (2) (3))) - -(define (memq obj a) (member obj a eq?)) - -(memq 2 '(1 2 3)) - -(memq 4 '(1 2 3)) - -(memq '(2) '((1) (2) (3))) - -(define (_assoc a b t?) -  (if (null? b) -      #f -    (if (t? a (caar b)) -	(car b) -      (_assoc a (cdr b) t?) -      ) -    ) -  ) - -(define (assq a b) (_assoc a b eq?)) -(define (assoc a b) (_assoc a b equal?)) - -(assq 'a '((a 1) (b 2) (c 3))) -(assoc '(c) '((a 1) (b 2) ((c) 3))) - -(define string (lambda a (list->string a))) - -(display "apply\n") -(apply cons '(a b)) - -(define map -  (lambda (a . b) -	 (define (args b) -	   (cond ((null? b) ()) -		 (else -		  (cons (caar b) (args (cdr b))) -		  ) -		 ) -	   ) -	 (define (next b) -	   (cond ((null? b) ()) -		 (else -		  (cons (cdr (car b)) (next (cdr b))) -		  ) -		 ) -	   ) -	 (define (domap b) -	   (cond ((null? (car b)) ()) -		 (else -		  (cons (apply a (args b)) (domap (next b))) -		  ) -		 ) -	   ) -	 (domap b) -	 ) -  ) - -(map cadr '((a b) (d e) (g h))) - -(define for-each (lambda (a . b) -			(apply map a b) -			#t)) - -(for-each display '("hello" " " "world" "\n")) - -(define (newline) (write-char #\newline)) - -(newline) | 
