Обозначим [x |-> v] t
как «заменить все свободные вхождения x в t с v».Определение замещения в выражении Lambda
Правило замены моего учебника являются
[x |-> v] x=v
[x |-> v] y=y (where y is not x)
[x |-> v] (function x -> t) = (function x -> t)
[x |-> v] (function y -> t) (where y is not x) =
(function y -> [x |-> v]t)
[x |-> v] (t1 t2) -> ([x |-> v]t1 [x |-> v]t2)
Я не совсем постигать первые два правил. Почему y x имеет значение? Являются ли первые x и второй x в [x |-> v] x
одинаковыми? Может ли у второго правила быть что-то вроде 1+x
? Можете ли вы привести два примера в выражении Lambda или C/C++/C#/Java, которые используют два правила соответственно?
спасибо большое!
В вашем примере x, y - все переменные. Может ли y быть выражением, которое содержит x? – Gqqnbig
@LoveRight Нет, так как это определение смысла 'x' и' y' должно быть переменным. Если 'y' может стоять на произвольных условиях, определение будет неправильным. Надеюсь, ваша книга указывает где-то, что она будет использовать 't1',' t2' и т. Д., Чтобы стоять за произвольные члены, 'x',' y' и т. Д., Чтобы стоять за переменными и 'v' (и предположительно' v1', v2' и т. д., если требуется несколько) для значений (т. е. неприводимых терминов) - возможно, есть секция обозначений или условностей, где это написано. – sepp2k