Например, если есть выражение:
(map (lambda(x) (add1 x)) '(1 2 3))
Оценивается:
'(2 3 4)
Как отобразить все промежуточные шаги, которые в этом случае будут:
(map (lambda(x) (add1 x)) '(2 2 3)) (map (lambda(x) (add1 x)) '(2 3 3))
Я думаю, что лучший способ сделать это - начать с создания собственного интерпретатора лямбда-исчисления и добавления дополнительных необходимых вам схемных функций, а затем изменить этот интерпретатор для получения требуемой трассировки выполнения.
Это может помочь вам начать писать переводчика http://matt.might.net/articles/implementing-a-programming-language/