Свободные переменные - это особый случай в лямбда-исчислении - их нельзя «преобразовать» во что-либо, поэтому обычно они воспринимаются как символы. В вашем примере, и учитывая некоторые фиктивные конструкторы для лямбда-выражений, вы бы перевели его на следующее (включая работу с неявным карри) C-подобным выражением:
mk_app(mk_app(mk_app(mk_sym("x"),
mk_lam("x",
mk_lam("y",
mk_app(mk_var("x"),
mk_var("y"))))),
mk_sym("z")),
mk_sym("h"));
Очевидно, что вы можете использовать mk_var()
и для этих символов, но это может ввести в заблуждение, поскольку они на самом деле не являются переменными, поскольку они не связаны. Другими словами, если вы выполните какое-либо альфа-преобразование в выражении, они должны остаться прежними.
(Кстати, соответствующая часть здесь - допущение Барендрегта о свободной переменной.)