mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 04:55:04 +02:00
TODO: staging for enhanced map/for-each
This commit is contained in:
parent
65529629d5
commit
bf185a47e6
1 changed files with 54 additions and 11 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue