Первая версия создает переменную с именем foo и присваивает ей ссылку на bar. Больше ничего не исполняется.
Вторая версия создает функцию с панелью тела. Функция не выполняется, она хранится в файле (угадайте, что вы подразумеваете под «ожиданием»?).
Вы всегда вызываете функцию, делая ее первым элементом в списке и оценивая список.
создать переменную
> (define a 1)
> a
1
создать другую переменную, ссылающуюся на другую переменную
> (define b a)
> b
1
создать функцию, которая возвращает все, что есть в
> (define (c) a)
> c
#<procedure:c>
оценить функцию
> (c)
1
написать функцию, которая оценивает другую функцию и возвращает результат
> (define (d) (if (odd? a) (c) 0))
> (d)
1
теперь измените его, чтобы вернуть функцию c
> (define (d) (if (odd? a) c 0))
> (d)
#<procedure:c>