TODO: staging for enhanced map/for-each

This commit is contained in:
Justin Ethier 2016-02-11 22:52:13 -05:00
parent 65529629d5
commit bf185a47e6

View file

@ -613,17 +613,60 @@
(else (else
(f (car lst)) (f (car lst))
(for-each f (cdr lst))))) (for-each f (cdr lst)))))
; TODO: ;; TODO:
;(define (vector-map fnc . vargs) ;;; SRFI 8
; (let ((ls (map vector->list v vargs))) ;;; Reference implementation from: http://srfi.schemers.org/srfi-8/srfi-8.html
; (list->vector ;;;
; (apply map ;;; FUTURE: This may be moved into its own file
; (cons fnc ls))))) ;;;
; ;;(define-syntax receive
;(define (vector-for-each fnc . vargs) ;; (syntax-rules ()
; (let ((ls (map vector->list vargs))) ;; ((receive formals expression body ...)
; (apply for-each ;; (call-with-values (lambda () expression)
; (cons fnc ls)))) ;; (lambda formals body ...)))))
;;; END SRFI 8
;;
;;; Added the following support functions from SRFI 1
;;(define (car+cdr pair) (values (car pair) (cdr pair)))
;;(define (%cars+cdrs lists)
;; (call-with-current-continuation
;; (lambda (abort)
;; (let recur ((lists lists))
;; (if (pair? lists)
;; (receive (list other-lists) (car+cdr lists)
;; (if (null? list) (abort '() '()) ; LIST is empty -- bail out
;; (receive (a d) (car+cdr list)
;; (receive (cars cdrs) (recur other-lists)
;; (values (cons a cars) (cons d cdrs))))))
;; (values '() '()))))))
;;; END support functions
;;
;;(define (map f lis1 . lists)
;;; (check-arg procedure? f map-in-order)
;; (if (pair? lists)
;; (let recur ((lists (cons lis1 lists)))
;; (receive (cars cdrs) (%cars+cdrs lists)
;; (if (pair? cars)
;; (let ((x (apply f cars))) ; Do head first,
;; (cons x (recur cdrs))) ; then tail.
;; '())))
;; ;; Fast path.
;; (foldr (lambda (x y) (cons (f x) y)) '() lis1)))
;;
;;(define (for-each f lis1 . lists)
;; (if (not (null? lis1))
;; (if (pair? lists)
;; (let recur ((lists (cons lis1 lists)))
;; (receive (cars cdrs) (%cars+cdrs lists)
;; (if (pair? cars)
;; (begin
;; (apply f cars)
;; (recur cdrs)))))
;; ;; Fast path.
;; (if (eq? 1 (length lis1))
;; (f (car lis1))
;; (begin (f (car lis1))
;; (for-each f (cdr lis1)))))))
(define (list-tail lst k) (define (list-tail lst k)
(if (zero? k) (if (zero? k)
lst lst