26 lines
542 B
Scheme
26 lines
542 B
Scheme
|
(define-library (picrin procedure)
|
||
|
(import (scheme base))
|
||
|
(export >>
|
||
|
<<
|
||
|
constant
|
||
|
identity)
|
||
|
|
||
|
(define identity values)
|
||
|
|
||
|
(define (constant . args)
|
||
|
(lambda _
|
||
|
(apply values args)))
|
||
|
|
||
|
(define (>> . fs)
|
||
|
(if (null? fs)
|
||
|
identity
|
||
|
(let ((f (car fs))
|
||
|
(g (apply >> (cdr fs))))
|
||
|
(lambda args
|
||
|
(call-with-values (lambda () (apply f args))
|
||
|
(lambda args
|
||
|
(apply g args)))))))
|
||
|
|
||
|
(define (<< . fs)
|
||
|
(apply >> (reverse fs))))
|