どこか(2ch?何かの本?)に出ていたコードかもしれませんが、
なぜ例-Aのほうはfooを変更しても結果が変わらないのに、
例-Bのほうはfooを変更すると結果が変わるのでしょうか?

;;; 例-A
(define foo begin)
(define bar (lambda (a b c) (foo a b c)))
(bar #t 0 1)
;;==> 1
(define foo list)
(bar #t 0 1)
;;==> 1

;;; 例-B
(define foo (lambda (m) (- m 3)))
(define bar (lambda (n) (foo n)))
(bar 10)
;;==> 7
(define foo (lambda (m) (+ m 3)))
(bar 10)
;;==> 13