X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fscheme%2Fao_scheme_const.scheme;h=29f000b3c58c976a6513a72a42f3246183c673fe;hb=637795fcf8ca52af431acec183cc961dae121e57;hp=ab6a309a7e9193db457038f5a981b2169de99fef;hpb=d1d98e408311c5ba18138a18f4c88448e4254626;p=fw%2Faltos diff --git a/src/scheme/ao_scheme_const.scheme b/src/scheme/ao_scheme_const.scheme index ab6a309a..29f000b3 100644 --- a/src/scheme/ao_scheme_const.scheme +++ b/src/scheme/ao_scheme_const.scheme @@ -248,7 +248,7 @@ (macro (first . rest) ; check for alternate lambda definition form - (cond ((list? first) + (cond ((pair? first) (set! rest (append (list @@ -512,12 +512,13 @@ (unless #f (write 'unless)) (define (reverse list) - (let ((result ())) - (while (not (null? list)) - (set! result (cons (car list) result)) - (set! list (cdr list)) - ) - result) + (define (_r old new) + (if (null? old) + new + (_r (cdr old) (cons (car old) new)) + ) + ) + (_r list ()) ) (reverse '(1 2 3)) @@ -640,7 +641,7 @@ (char-whitespace? #\0) (char-whitespace? #\space) -(define (char->integer c) c) +(define char->integer (macro (v) v)) (define integer->char char->integer) (define (char-upcase c) (if (char-lower-case? c) (+ c (- #\A #\a)) c)) @@ -664,36 +665,46 @@ (define map (lambda (proc . lists) - (define (args lists) + (define (_a lists) (cond ((null? lists) ()) (else - (cons (caar lists) (args (cdr lists))) + (cons (caar lists) (_a (cdr lists))) ) ) ) - (define (next lists) + (define (_n lists) (cond ((null? lists) ()) (else - (cons (cdr (car lists)) (next (cdr lists))) + (cons (cdr (car lists)) (_n (cdr lists))) ) ) ) - (define (domap lists) + (define (_m lists) (cond ((null? (car lists)) ()) (else - (cons (apply proc (args lists)) (domap (next lists))) + (cons (apply proc (_a lists)) (_m (_n lists))) ) ) ) - (domap lists) + (_m lists) ) ) (map cadr '((a b) (d e) (g h))) -(define for-each (lambda (proc . lists) - (apply map proc lists) - #t)) +(define for-each + (lambda (proc . lists) + (define (_f lists) + (cond ((null? (car lists)) #t) + (else + (apply proc (map car lists)) + (_f (map cdr lists)) + ) + ) + ) + (_f lists) + ) + ) (for-each display '("hello" " " "world" "\n")) @@ -708,8 +719,9 @@ (string-map (lambda (x) (+ 1 x)) "HAL") -(define string-for-each (lambda (proc . strings) - (apply for-each proc (_string-ml strings)))) +(define string-for-each + (lambda (proc . strings) + (apply for-each proc (_string-ml strings)))) (string-for-each write-char "IBM\n") @@ -805,9 +817,3 @@ ) (case 12 (1 "one") (2 "two") (3 => (lambda (x) (write "the value is" x))) (12 "twelve") (else "else")) - -;(define number->string (lambda (arg . opt) -; (let ((base (if (null? opt) 10 (car opt))) - ; -; -