X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=src%2Fscheme-library.scm;h=cd2693231759f24143b192baa22b34d6d06f2f99;hb=5c256a740ae9bf1f774e202cbdaf66d8e33f37e7;hp=14aa6f89d619553bc1c0e21c34db0633e1c31e22;hpb=2899e37fdb0ecf89bb949cfcc0a9db2cac54677f;p=scheme.forth.jl.git diff --git a/src/scheme-library.scm b/src/scheme-library.scm index 14aa6f8..cd26932 100644 --- a/src/scheme-library.scm +++ b/src/scheme-library.scm @@ -13,7 +13,27 @@ (define (cdar l) (cdr (car l))) (define (cddr l) (cdr (cdr l))) (define (cadar l) (car (cdr (car l)))) +(define (caddr l) (car (cdr (cdr l)))) +(define (cadddr l) (car (cdr (cdr (cdr l))))) +;; FUNCTIONAL PROGRAMMING + +(define (fold-left proc init l) + (if (null? l) + init + (fold-left proc (proc init (car l)) (cdr l)))) + +(define (reduce-left proc init l) + (if (null? l) + init + (if (null? (cdr l)) + (car l) + (fold-left proc (proc (car l) (car (cdr l))) (cdr (cdr l)))))) + +(define (map proc l) + (if (null? l) + '() + (cons (proc (car l)) (map proc (cdr l))))) ;; NUMBERS @@ -118,18 +138,6 @@ (define (null? arg) (eq? arg '())) -(define (fold-left proc init l) - (if (null? l) - init - (fold-left proc (proc init (car l)) (cdr l)))) - -(define (reduce-left proc init l) - (if (null? l) - init - (if (null? (cdr l)) - (car l) - (fold-left proc (proc (car l) (car (cdr l))) (cdr (cdr l)))))) - (define (+ . args) (fold-left pair+ 0 args))