fork download
  1. ; my mailbag
  2.  
  3. (define (mult left right)
  4. (let loop ((left left) (right right) (prod 0))
  5. (cond ((= left 1) (+ prod right))
  6. ((odd? left)
  7. (loop (quotient left 2) (* right 2) (+ prod right)))
  8. (else (loop (quotient left 2) (* right 2) prod)))))
  9.  
  10. (display (mult 7 13)) (newline)
  11. (display (mult 13 7)) (newline)
  12.  
  13. (define (compose . fns)
  14. (let comp ((fns fns))
  15. (cond ((null? fns) (lambda (x) x)) ; identity function
  16. ((null? (cdr fns)) (car fns))
  17. (else (lambda args
  18. (call-with-values
  19. (lambda () (apply (comp (cdr fns)) args))
  20. (car fns)))))))
  21.  
  22. (define (add1 n) (+ n 1))
  23. (define (double n) (* n 2))
  24. (display ((compose) (+ 1 4))) (newline)
  25. (display ((compose add1) 4)) (newline)
  26. (display ((compose add1 double) 2)) (newline)
Success #stdin #stdout 0s 8024KB
stdin
Standard input is empty
stdout
91
91
5
5
5