From: Keith Packard Date: Tue, 19 Dec 2017 21:09:24 +0000 (-0800) Subject: altos/lambdakey-v1.0: Add back and/or macros X-Git-Tag: 1.8.4~1^2~6 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=9826845f952abe898f029e31cc0f7080708e2eae altos/lambdakey-v1.0: Add back and/or macros With scheme shrinking a bit, there's now space for these useful macros. Signed-off-by: Keith Packard --- diff --git a/src/lambdakey-v1.0/ao_lambdakey_const.scheme b/src/lambdakey-v1.0/ao_lambdakey_const.scheme index 50373272..a912b8ae 100644 --- a/src/lambdakey-v1.0/ao_lambdakey_const.scheme +++ b/src/lambdakey-v1.0/ao_lambdakey_const.scheme @@ -49,7 +49,7 @@ ) 'append) -(append '(a b c) '(d e f) '(g h i)) +(append '(a) '(b)) ; ; Define a variable without returning the value @@ -66,7 +66,7 @@ (macro (a . b) ; check for alternate lambda definition form - (cond ((list? a) + (cond ((pair? a) (set! b (cons lambda (cons (cdr a) b))) (set! a (car a)) @@ -92,26 +92,86 @@ 'define ) + ; boolean operators + +(begin + (def! or + (macro a + (def! _or + (lambda (a) + (cond ((null? a) #f) + ((null? (cdr a)) + (car a)) + (else + (list + cond + (list + (car a)) + (list + 'else + (_or (cdr a)) + ) + ) + ) + ) + ) + ) + (_or a))) + 'or) + + ; execute to resolve macros + +(or #f #t) + +(begin + (def! and + (macro a + (def! _and + (lambda (a) + (cond ((null? a) #t) + ((null? (cdr a)) + (car a)) + (else + (list + cond + (list + (car a) + (_and (cdr a)) + ) + ) + ) + ) + ) + ) + (_and a) + ) + ) + 'and) + + ; execute to resolve macros + +(and #t #f) + ; basic list accessors -(define (caar l) (car (car l))) +(define (caar a) (car (car a))) -(define (cadr l) (car (cdr l))) +(define (cadr a) (car (cdr a))) -(define (cdar l) (cdr (car l))) +; (define (cdar a) (cdr (car a))) ; (if ) ; (if