eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programminglambda, clojuresRe: lambda i clojures
  • Data: 2011-10-16 09:01:00
    Temat: Re: lambda i clojures
    Od: " " <f...@g...SKASUJ-TO.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Piotr Chamera <p...@p...onet.pl> napisał(a):

    > W dniu 2011-10-16 07:25, f...@g...SKASUJ-TO.pl pisze:
    > > Piotr Chamera<p...@p...onet.pl> napisał(a):
    > >> Closure to taka funkcja powiązana ze środowiskiem, w którym została
    > >> zdefiniowana. N.p.:
    > >>
    > >> (let ((licznik 0))
    > >> (defun następny () (setf licznik (1+ licznik))))
    > >>
    > >> CL-USER> (następny)
    > >> 1
    > >>
    > >> CL-USER> licznik
    > >> Unbound variable: LICZNIK
    > >> [Condition of type UNBOUND-VARIABLE]
    > >>
    > >> CL-USER> (następny)
    > >> 2
    > >>
    > >> W Wikipedii jest to całkiem dobrze opisane:
    > >> http://en.wikipedia.org/wiki/Closure_%28computer_sci
    ence%29
    > >
    > > a czym sie rozni od zwyklej normalnej 'niepowiazanej' funkcji?
    > > w tym prztkladzie wyzej nie rozumiem co to jest i co
    > > to ma ilustrowac:
    > >
    > >> CL-USER> licznik
    > >> Unbound variable: LICZNIK
    > >> [Condition of type UNBOUND-VARIABLE]
    >
    > Że „licznik” nie jest dostępny globalnie - po wyjściu z zasięgu
    > konstrukcji „let” przestał być widoczny, ale po wywołaniu funkcji
    > nadal jest dostępny - to fragment środowiska, w którym funkcja była
    > definiowana, który został przez nią przechwycony. Nie może być
    > odłożony na stosie, jest zewnętrzny w stosunku do ciała funkcji i może
    > przenosić informację pomiędzy jej wywołaniami. Żeby to zrobić w C
    > trzeba by pewnie zaalokować jakiś obiekt na stercie i przekazać
    > do funkcji wskaĹşnik do niego.
    >
    > Po rozszerzeniu pierwszego przykładu o drugą operację na
    > liczniku mamy najprostszy obiekt z dwiema operacjami na nim
    > i enkapsulacją jego wewnętrznego stanu.
    >
    > (let ((licznik 0))
    > (defun następny () (setf licznik (1+ licznik)))
    > (defun poprzedni () (setf licznik (1- licznik))))
    >

    denerwuje mnie to niepowiernie bo nic z tego nie rozumiem,
    np w c funkcja jest definiowana tylko raz i dotego w globalnym
    kontekscie wiec powiedzmy ze to c nie dotyczy

    ale czy tam gdzie tego sie uzywa taka funkcje definiuje sie kilka
    razy w roznych kontekstach? czy kazda z nich przechwytuje ten kontekst
    raczej przez referencje czy przez wartosc? czy np jesli jest 5 definicji
    to te wspolne przechwycine dane sa wspolne dla tych definicji?



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: