2013-10-13 3 views
0

Обозначим [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, которые используют два правила соответственно?

спасибо большое!

ответ

1

Первое правило - это сопоставление x - v. Второе правило гласит, что любые переменные, которые не являются x, остаются неизменными. Оба они являются частью того же правила, которое необходимо для полного определения его поведения.

Я полагаю, несколько разумным примером может быть следующее:

int x = 1337; 
int y = 9001; 
int v; 
v = x; 

Обратите внимание, что v теперь установлен на значение x (первое правило), но значение y не изменилось (второе правило).

+0

В вашем примере x, y - все переменные. Может ли y быть выражением, которое содержит x? – Gqqnbig

+0

@LoveRight Нет, так как это определение смысла 'x' и' y' должно быть переменным. Если 'y' может стоять на произвольных условиях, определение будет неправильным. Надеюсь, ваша книга указывает где-то, что она будет использовать 't1',' t2' и т. Д., Чтобы стоять за произвольные члены, 'x',' y' и т. Д., Чтобы стоять за переменными и 'v' (и предположительно' v1', v2' и т. д., если требуется несколько) для значений (т. е. неприводимых терминов) - возможно, есть секция обозначений или условностей, где это написано. – sepp2k