(Jestem pewien, że na tę stronę już trzeba było odpowiedzieć, ale wyszukiwanie zostaje zalane koncepcją wywoływania free() na zmiennej w C.)Co to jest "zmienna wolna"?
Natknąłem się na termin "redukcja eta", który został zdefiniowany tak, jak f x = M x ==> M
, jeśli x jest "nie wolny w M". Chodzi mi o to, myślę, że rozumiem sedno tego, co próbuje powiedzieć, wydaje się, że robisz to, gdy konwertujesz funkcję na styl bezcłowy, ale nie wiem, co oznacza, że kwalifikator na x nie jest wolny.
Drobna nitpick: może być w porządku dla 'x', jeśli jest związana. Eta-redukujące '(\ x -> (\ x -> x + x) x)' do '(\ x -> x + x)' jest całkowicie w porządku, nawet jeśli '(\ x -> x + x)' zawiera dwa zastosowania 'x'. Jest to przypadek narożny, który nie pokaże zbyt wiele w radzeniu sobie z ludzkim kodem, ale wyobrażam sobie, że kompilatory będą częściej się nad tym zastanawiać. – yatima2975
Nadrobiłem tam trochę sformułowania. "Ale tylko jeśli' x' nie jest używane (to znaczy nie jest wolne) "powinno być" Ale tylko wtedy, gdy 'x' nie jest wolny (to znaczy nie jest używany lub jest argumentem)". Oryginalnie napisałem to w ten sposób, ale zmieniłem go w inny sposób, aby było prostsze. Niestety to zmieniło znaczenie :) – porges