lista dowolnych typów
duzy - 23-01-2006 10:06
lista dowolnych typów
Witam.
Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista dająca takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale mogę sie mylić. Będę wdzięczny ze wszelką pomoc.
Pozdrowienia Duzy
Stachu 'Dozzie' K. - 23-01-2006 10:06
On 22.01.2006, duzy <piotrko@o2.pl> wrote: > Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas > wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej > zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista dająca > takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale mogę sie > mylić.
Ależ oczywiście, że są takie listy. W Perlu są @tablice, w Rubym i Pythonie takoż tablice (ale już bez @małpy). W Tclu tak naprawdę wszystko jest stringiem, więc wszystko można w listę wpakować bezkarnie. Podobnie w Javie, wszystko praktycznie jest pochodną klasy Object, na czym zresztą do niedawna opierały się wszystkie kontenery.
BTW. Spraw sobie jakiś czytnik news albo dokonfiguruj ałtlóka.
-- Feel free to correct my English Stanislaw Klekot
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 23-01-2006 10:06
duzy wrote: > Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas > wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej > zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista dająca > takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale mogę sie > mylić. > Będę wdzięczny ze wszelką pomoc.
Jakbyś jeszcze był łaskaw podać język programowania w jakim zamierzasz to wykonać to byłoby cool :-)))
Polecam: http://www.catb.org/~esr/faqs/smart-...html#beprecise
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 23-01-2006 10:06
"Stachu 'Dozzie' K." <dozzie@dynamit.im.pwr.wroc.pl.nospam> writes:
[...]
> W Perlu są @tablice, w Rubym i Pythonie takoż tablice
W Pythonie tablice są, ale jako rozszerzenie. Podstawowe struktury danych to krotki, listy i słowniki.
Marcin 'Qrczak' Kowalczyk - 23-01-2006 10:06
pdemb@gazeta.pl (Piotr Dembiński) writes:
>> W Perlu są @tablice, w Rubym i Pythonie takoż tablice > > W Pythonie tablice są, ale jako rozszerzenie. Podstawowe struktury > danych to krotki, listy i słowniki.
To, co Python nazywa listą, według tradycyjnej terminologii należy nazywać tablicą.
-- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 23-01-2006 10:06
Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> writes:
> pdemb@gazeta.pl (Piotr Dembiński) writes: > >>> W Perlu są @tablice, w Rubym i Pythonie takoż tablice >> >> W Pythonie tablice są, ale jako rozszerzenie. Podstawowe struktury >> danych to krotki, listy i słowniki. > > To, co Python nazywa listą, według tradycyjnej terminologii należy > nazywać tablicą.
O. Podasz link do definicji tablicy i listy?
Marcin 'Qrczak' Kowalczyk - 23-01-2006 10:06
pdemb@gazeta.pl (Piotr Dembiński) writes:
>> To, co Python nazywa listą, według tradycyjnej terminologii należy >> nazywać tablicą. > > O. Podasz link do definicji tablicy i listy?
Nie ma tutaj formalnych definicji i oba pojęcia są wieloznaczne, ale pewne cechy są dość powszechnie przyjęte.
Tablica (array) - Dostęp do elementu o danym indeksie w czasie O(1). Obliczenie długości również. Prawie zawsze jest mutable, tzn. wymiana elementu na inny w miejscu w czasie O(1). Zwiększenie i zmniejszenie długości może być możliwe albo nie, różnie w różnych językach.
Lista (list) - Tutaj jest większa różnorodność. Dodanie i usunięcie elementu na początku w czasie O(1) albo zbudowanie nowej listy z nowym elementem dodanym na początku bądź z pierwszym elementem usuniętym w czasie O(1). Czasem można też dodać i usunąć element na końcu w czasie O(1). Może być możliwe dodanie albo usunięcie elementu ze środka w czasie O(1), ale nie musi (dotarcie do tego miejsca ma czas liniowy względem odległości od końca).
(Ściśle mówiąc te O(1) są oszukane, ale nie chcę wnikać.)
-- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/
duzy - 23-01-2006 10:06
> duzy wrote: >> Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas >> wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej >> zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista >> dająca takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale >> mogę sie mylić. >> Będę wdzięczny ze wszelką pomoc. > > Jakbyś jeszcze był łaskaw podać język programowania w jakim zamierzasz to > wykonać to byłoby cool :-))) Słuszna uwaga <skrucha>. Pisze w c++
Pozdrowienia Duzy
duzy - 23-01-2006 10:06
A wiesz jak jest w c++? > BTW. Spraw sobie jakiś czytnik news albo dokonfiguruj ałtlóka. A co jest nie tak? Pozdrowienia Duzy
Stachu 'Dozzie' K. - 23-01-2006 10:06
On 22.01.2006, duzy <piotrko@o2.pl> wrote: > A wiesz jak jest w c++?
Jak co jest w C++? Cytuj to, do czego się odnosisz.
>> BTW. Spraw sobie jakiś czytnik news albo dokonfiguruj ałtlóka. > A co jest nie tak?
Brak zadeklarowanego kodowania.
-- Feel free to correct my English Stanislaw Klekot
duzy - 23-01-2006 10:06
Użytkownik "Stachu 'Dozzie' K." <dozzie@dynamit.im.pwr.wroc.pl.nospam> napisał w wiadomości news:slrndt7knl.4cb.dozzie@hans.zsh.bash.org.pl... > On 22.01.2006, duzy <piotrko@o2.pl> wrote: >> Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas >> wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej >> zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista >> dająca >> takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale mogę >> sie >> mylić. > > Ależ oczywiście, że są takie listy. W Perlu są @tablice, w Rubym > i Pythonie takoż tablice (ale już bez @małpy). W Tclu tak naprawdę > wszystko jest stringiem, więc wszystko można w listę wpakować bezkarnie. > Podobnie w Javie, wszystko praktycznie jest pochodną klasy Object, na > czym zresztą do niedawna opierały się wszystkie kontenery.
A jak jest w c++?
ps. czy kodowanie sie poprawiło?
Pozdrowienia Duzy
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 23-01-2006 10:06
duzy wrote: > > ps. czy kodowanie sie poprawiło?
Tak. Widzę w nagłówkach taką deklarację:
charset="iso-8859-2";
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 23-01-2006 10:06
duzy wrote: >>duzy wrote: >> >>>Potrzebuje stworzyć listę do której będę dokładać dynamicznie (podczas >>>wykonywania programu) przypisywać zmienne dowolnych typów, najczęściej >>>zdefiniowanych wcześniej struktur. Czy jest jakaś standardowa lista >>>dająca takie możliwości? Wydaje mi sie że sie kiedyś z tym spotkałem, ale >>>mogę sie mylić. >>>Będę wdzięczny ze wszelką pomoc. >> >>Jakbyś jeszcze był łaskaw podać język programowania w jakim zamierzasz to >>wykonać to byłoby cool :-))) > > Słuszna uwaga <skrucha>. > Pisze w c++
A widzisz, no to takiej "standardowej" struktury to ja nie znam. Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) i w liście trzymać obiekty tych różnych bo specjalizowanych typów przez interfejs klasy bazowej (wskaźnik,referencja), ale to ma oczywiste ograniczenia. Możesz stosować tylko określony ograniczony zestaw typów (podtypów bazowego typu).
Mógłbyś pokusić się o sklecenie czegoś na bazie typów z Boost. Poczytaj o: http://boost.org/doc/html/any.html http://boost.org/doc/html/variant.html
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
Doker - 24-01-2006 10:43
>> Słuszna uwaga <skrucha>. >> Pisze w c++ > > A widzisz, no to takiej "standardowej" struktury to ja nie znam. > Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć > hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) > i w liście trzymać obiekty tych różnych bo specjalizowanych typów przez > interfejs klasy bazowej (wskaźnik,referencja), ale to ma oczywiste > ograniczenia. Możesz stosować tylko określony ograniczony zestaw typów > (podtypów bazowego typu). a listy do wskazników typu void nie mozna zrobic?
duzy - 24-01-2006 10:43
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości news:dr30vn$2ag1$1@node3.news.atman.pl... >>> Słuszna uwaga <skrucha>. >>> Pisze w c++ >> >> A widzisz, no to takiej "standardowej" struktury to ja nie znam. >> Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć >> hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) >> i w liście trzymać obiekty tych różnych bo specjalizowanych typów przez >> interfejs klasy bazowej (wskaźnik,referencja), ale to ma oczywiste >> ograniczenia. Możesz stosować tylko określony ograniczony zestaw typów >> (podtypów bazowego typu). > a listy do wskazników typu void nie mozna zrobic? no proszę. tak prosta odpowiedź, a tak długo na nią czekałem. Już sprawdziłem, i działa. Dzięki wielkie. Duzy
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 24-01-2006 10:43
Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> writes:
> pdemb@gazeta.pl (Piotr Dembiński) writes: > >>> To, co Python nazywa listą, według tradycyjnej terminologii należy >>> nazywać tablicą. >> >> O. Podasz link do definicji tablicy i listy? > > Nie ma tutaj formalnych definicji i oba pojęcia są wieloznaczne, > ale pewne cechy są dość powszechnie przyjęte.
Tak przy okazji, nie wiesz, czy w ogóle jest zdefiniowane pojęcie imperatywnego języka programowania?
> Tablica (array) - Dostęp do elementu o danym indeksie w czasie O(1). > Obliczenie długości również. Prawie zawsze jest mutable, tzn. > wymiana elementu na inny w miejscu w czasie O(1). Zwiększenie > i zmniejszenie długości może być możliwe albo nie, różnie w różnych > językach. > > Lista (list) - Tutaj jest większa różnorodność. Dodanie i usunięcie > elementu na początku w czasie O(1) albo zbudowanie nowej listy z nowym > elementem dodanym na początku bądź z pierwszym elementem usuniętym > w czasie O(1). Czasem można też dodać i usunąć element na końcu > w czasie O(1). Może być możliwe dodanie albo usunięcie elementu ze > środka w czasie O(1), ale nie musi (dotarcie do tego miejsca ma czas > liniowy względem odległości od końca).
Chodziło właśnie o funkcjonalność: insert, remove, append, pop. To wszystko jest w listach pajtonowych. Nie analizowałem złożoności czasowych, ale chyba jak się nazywają 'listy', to mają takie, jak podałeś. W końcu po kiego grzyba Guido nazywałby to 'list', jak by nie spełniało założeń co do listy?
> (Ściśle mówiąc te O(1) są oszukane, ale nie chcę wnikać.)
Chodzi o koszt amortyzowany?
-- http://www.piotr.dembiński.prv.pl
tomasz sobkowiak - 24-01-2006 10:43
=?ISO-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
duzy <piotrko@o2.pl> napisał(a):
> > Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości > news:dr30vn$2ag1$1@node3.news.atman.pl... > >>> Słuszna uwaga <skrucha>. > >>> Pisze w c++ > >> > >> A widzisz, no to takiej "standardowej" struktury to ja nie znam. > >> Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć > >> hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) > >> i w liście trzymać obiekty tych różnych bo specjalizowanych typów przez > >> interfejs klasy bazowej (wskaźnik,referencja), ale to ma oczywiste > >> ograniczenia. Możesz stosować tylko określony ograniczony zestaw typów > >> (podtypów bazowego typu). > > a listy do wskazników typu void nie mozna zrobic? > no proszę. tak prosta odpowiedź, a tak długo na nią czekałem. > Już sprawdziłem, i działa. > Dzięki wielkie. > Duzy
To juz lepiej boost::any.
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 24-01-2006 10:43
Doker wrote: >>> Słuszna uwaga <skrucha>. >>> Pisze w c++ >> >> >> A widzisz, no to takiej "standardowej" struktury to ja nie znam. >> Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć >> hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) >> i w liście trzymać obiekty tych różnych bo specjalizowanych typów >> przez interfejs klasy bazowej (wskaźnik,referencja), ale to ma >> oczywiste ograniczenia. Możesz stosować tylko określony ograniczony >> zestaw typów (podtypów bazowego typu). > > a listy do wskazników typu void nie mozna zrobic?
duzy pisze w C++ to niech zastosuje rozwiązanie na miare C++ a nie C :-)
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 24-01-2006 10:43
duzy wrote: > > Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości > news:dr30vn$2ag1$1@node3.news.atman.pl... > >>>> Słuszna uwaga <skrucha>. >>>> Pisze w c++ >>> >>> >>> A widzisz, no to takiej "standardowej" struktury to ja nie znam. >>> Oczywiście, mógłbyś się pobawić z variant'ami, mógłbyś stworzyć >>> hierarchię klas (klasa bazowa i specjalizowane przez dziedziczenie) >>> i w liście trzymać obiekty tych różnych bo specjalizowanych typów >>> przez interfejs klasy bazowej (wskaźnik,referencja), ale to ma >>> oczywiste ograniczenia. Możesz stosować tylko określony ograniczony >>> zestaw typów (podtypów bazowego typu). >> >> a listy do wskazników typu void nie mozna zrobic? > > no proszę. tak prosta odpowiedź, a tak długo na nią czekałem. > Już sprawdziłem, i działa. > Dzięki wielkie.
Duzy, jak bardzo chcesz programować w C++ tworząc kod w C to nie będę Cię wstrzymywał ale przed pozwolę sobie zaapelować do Ciebie i przeczytaj Waść ten tekst:
http://www.kuro5hin.org/story/2002/5/1/142321/9513
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
=?ISO-8859-2?Q?Marcin_Miel=BFy=F1ski?= - 24-01-2006 10:43
duzy wrote: >
> > A jak jest w c++? >
W C++ jest średnio, ponieważ nie ma w języku/bibliotece standardowej zdefiniowanej ściśle klasy korzenia z której cała reszta się wywodzi (jak np: w Javie, C#, Smalltalku, Pythonie, Rubym, etc). Są dwa wyjścia, musisz stworzyć taką klasę sam i zniej wywieść całą resztę (lub stworzyć klasę proxy) albo jechać na np: void* (to drugie odradzam, bo nonstop będzie rzutowanie). Resztę załatwia np: boost/stl.
lopex
=?ISO-8859-2?Q?Marcin_Miel=BFy=F1ski?= - 24-01-2006 10:43
Piotr Dembiński wrote:
> > Chodziło właśnie o funkcjonalność: insert, remove, append, pop. > To wszystko jest w listach pajtonowych. Nie analizowałem złożoności > czasowych, ale chyba jak się nazywają 'listy', to mają takie, jak > podałeś. W końcu po kiego grzyba Guido nazywałby to 'list', jak > by nie spełniało założeń co do listy? >
No właśnie to co jest list w Pythonie w całej reszcie to jest array, co może być trochę mylące. Listy pythonowe są po prostu tablicami wskaźników (przy zmianie rozmiaru o jakis interwał wołany jest memcpy/malloc/realloc).
Listy (po ich prawdziwą nazwą) mają liniowy czas dostępu do ntego elementu. Można to poprawić na przykład łańcuchując dłuższe kawałki tablic lub stosując skipwęzły (ale i tak czas zostanie liniowy O(n) ), dodatkowo utrudnia to aktualizację.
Po za tym zawsze w tyłu siedzi memory manager którego zachowanie bardzo mocno zależy od stanu pamięci (np: realloc może być bardzo kosztowny).
lopex
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 24-01-2006 10:43
Marcin Mielżyński wrote: > duzy wrote: > >> > >> >> A jak jest w c++? >> > > W C++ jest średnio,
średnio to znaczy jak?
> ponieważ nie ma w języku/bibliotece standardowej > zdefiniowanej ściśle klasy korzenia z której cała reszta się wywodzi > (jak np: w Javie, C#, Smalltalku, Pythonie, Rubym, etc).
I hAlleluja, że w C++ nie ma jak w w/w :-)
> Są dwa wyjścia, musisz stworzyć taką klasę sam i zniej wywieść całą > resztę (lub stworzyć klasę proxy) albo jechać na np: void* (to drugie > odradzam, bo nonstop będzie rzutowanie).
Większy problem to brak bezpieczeństwa typów. boost::any to załatwia. Choć są i tacy co narzekają na performance (ja nie narzekam :-)) to sobie i piszą swoje wersje: http://www.codeproject.com/cpp/dynamic_typing.asp
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
Michal Przybylek - 24-01-2006 10:43
=?iso-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
"Piotr Dembiński" <pdemb@gazeta.pl> wrote:
> Tak przy okazji, nie wiesz, czy w ogóle jest zdefiniowane pojęcie > imperatywnego języka programowania?
Pewnie da sie zdefiniowac to pojecie, choc nie tak, jakbys zapewne oczekiwal.
Problem w tym, ze informatycy uzywaja nieformalnego jezyka i posluguja sie namietnie machaniem rekami (przy czym wierze, ze to wynika z natury skomplikowania informatycznego swiata), a nie scislymi definicjami. Zas, jak praktyka pokazuje, do zdefiniowania imperatywnosci potrzeba czegos wiecej.
Wydaje mi sie, ze przy formalnym zdefiniowaniu gramatyki i semantyki jezyka w podejsciu algebraicznym, mozna by pokombinowac w nastepujacym kierunku: jezyk nazwamy "nieimperatywnym", lub "czystym", jezeli istnieje _kompozycjonalna_ semantyka w algebre semantyczna majaca rodzaje wylacznie w typach danego jezyka.
Przy czym... niektorzy twierdza, ze "imperatywnosc" to co innego niz "niezmienniczosc". W tym podejsciu (mi blizszym) traktuje sie imperatywnosc jako pewien sposob myslenia o wykonywaniu sie programu. Ten sposob myslenia przy patrzeniu na jedne jezyki jest naturalny i prosty (te jezyki nazywamy imperatywnymi), zas przy patrzeniu na inne jezyki - skomplikowany i nienaturalny (te jezyki nazywamy deklaratywnymi).
W tym podejsciu granica jest rozmyta.
To podejscie z samego zalozenia nie posiada scislej definicji. Bazuje na osobistych odczuciach, ktore, szczesliwie, sa dosc podobne dla wiekszosci populacji.
BTW: Pewnie mozna by nawet prostote wydefiniowac formalnie, ale nie zamierzam teraz w to wchodzic :-)
mp
=?ISO-8859-2?Q?Marcin_Miel=BFy=F1ski?= - 24-01-2006 10:44
Mateusz Łoskot wrote: > Marcin Mielżyński wrote: >> duzy wrote: >> >>> >> >>> >>> A jak jest w c++? >>> >> >> W C++ jest średnio, > > średnio to znaczy jak? >
Trochę jest bałagan typeid, dynamic_cast, wołania wirtualne (choć dla prymitywów odpadają)
>> ponieważ nie ma w języku/bibliotece standardowej zdefiniowanej ściśle >> klasy korzenia z której cała reszta się wywodzi (jak np: w Javie, C#, >> Smalltalku, Pythonie, Rubym, etc). > > I hAlleluja, że w C++ nie ma jak w w/w :-) >
jest demokracja :D
> Większy problem to brak bezpieczeństwa typów. boost::any to załatwia. Pierwsza część zdania faktycznie.
any a="string"; // ?
lopex
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 24-01-2006 10:44
Marcin Mielżyński wrote: > Mateusz Łoskot wrote: >> Marcin Mielżyński wrote: >>> duzy wrote: >>>> A jak jest w c++? >>> >>> W C++ jest średnio, >> >> średnio to znaczy jak? > > Trochę jest bałagan typeid, dynamic_cast, wołania wirtualne (choć dla > prymitywów odpadają)
Pachnie Javą :-)
>>> ponieważ nie ma w języku/bibliotece standardowej zdefiniowanej ściśle >>> klasy korzenia z której cała reszta się wywodzi (jak np: w Javie, C#, >>> Smalltalku, Pythonie, Rubym, etc). >> >> I hAlleluja, że w C++ nie ma jak w w/w :-) > > jest demokracja :D
Albo zdrowy rozsądek.
>> Większy problem to brak bezpieczeństwa typów. boost::any to załatwia. > > Pierwsza część zdania faktycznie. > > any a="string"; // ?
boost::any a = std::string("asdf");
albo
boost::any a(std::string("asdf"));
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
Michal Przybylek - 24-01-2006 10:44
=?iso-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
"Michal Przybylek" <mrp@neostrada.pl> wrote:
> Wydaje mi sie, ze przy formalnym zdefiniowaniu gramatyki > i semantyki jezyka w podejsciu algebraicznym, mozna > by pokombinowac w nastepujacym kierunku: jezyk nazwamy > "nieimperatywnym", lub "czystym", jezeli istnieje _kompozycjonalna_ > semantyka w algebre semantyczna majaca rodzaje wylacznie w > typach danego jezyka.
Tfu, nie, to jest bez sensu.
W kazdym razie, pewnie gdzies w tym kierunku - trzeba nalozyc ograniczenia na algebre semantycza, aby nie dalo sie przepachac zmian stanu i sama semantyke wziasc kompozycjonalna aby zagwarantowac zadane zachowanie takze lokalnie.
Ale nie mam czasu teraz nad tym myslec...
mp
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 24-01-2006 10:44
Marcin Mielżyński <lopexx@autograf.pl> writes:
[...]
> No właśnie to co jest list w Pythonie w całej reszcie to jest array, > co może być trochę mylące. Listy pythonowe są po prostu tablicami > wskaźników (przy zmianie rozmiaru o jakis interwał wołany jest > memcpy/malloc/realloc). > > Listy (po ich prawdziwą nazwą) mają liniowy czas dostępu > do ntego elementu.
No tak, tyle że O(1) jest również O(n).
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 24-01-2006 10:44
"Michal Przybylek" <mrp@neostrada.pl> writes:
> "Michal Przybylek" <mrp@neostrada.pl> wrote: > >> Wydaje mi sie, ze przy formalnym zdefiniowaniu gramatyki >> i semantyki jezyka w podejsciu algebraicznym, mozna by pokombinowac >> w nastepujacym kierunku: jezyk nazwamy "nieimperatywnym", lub >> "czystym", jezeli istnieje _kompozycjonalna_ semantyka w algebre >> semantyczna majaca rodzaje wylacznie w typach danego jezyka. > > Tfu, nie, to jest bez sensu. > > W kazdym razie, pewnie gdzies w tym kierunku - trzeba nalozyc > ograniczenia na algebre semantycza, aby nie dalo sie przepachac > zmian stanu i sama semantyke wziasc kompozycjonalna aby > zagwarantowac zadane zachowanie takze lokalnie. > > Ale nie mam czasu teraz nad tym myslec...
W gruncie rzeczy miałem nadzieję na odesłanie do jakiejś szacownej pozycji literaturowej, ale jak już zaczynasz kombinować z semantyką, to osobiście widzę to tak, że imperatywny język programowania to taki język, którego semantykę można w naturalny sposób zdefiniować na maszynie RAM. Analogicznie: semantykę języka funkcyjnego można w naturalny sposób zdefiniować na rachunku lambda.
Problem w tym, że przy takim podejściu nie wiemy, co dokładnie znaczy fraza 'naturalny sposób' :>
-- http://www.piotr.dembiński.prv.pl
=?ISO-8859-2?Q?Marcin_Miel=BFy=F1ski?= - 24-01-2006 10:44
Mateusz Łoskot wrote:
>> >> Trochę jest bałagan typeid, dynamic_cast, wołania wirtualne (choć dla >> prymitywów odpadają) > > Pachnie Javą :-) >
dlaczego od razu Javą :D ? (tam już są klapki na oczy) >> >> any a="string"; // ? > > boost::any a = std::string("asdf"); > > albo > > boost::any a(std::string("asdf")); >
No właśnie to miało wyjść na jaw, jest niepełny...
lopex
tomasz sobkowiak - 24-01-2006 10:44
=?ISO-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
Marcin Mielżyński <lopexx@autograf.pl> napisał(a):
> Mateusz Łoskot wrote: > > >> > >> Trochę jest bałagan typeid, dynamic_cast, wołania wirtualne (choć dla > >> prymitywów odpadają) > > > > Pachnie Javą :-) > > > > dlaczego od razu Javą :D ? (tam już są klapki na oczy) > >> > >> any a="string"; // ? > > > > boost::any a = std::string("asdf"); > > > > albo > > > > boost::any a(std::string("asdf")); > > > > No właśnie to miało wyjść na jaw, jest niepełny...
Ale co?? Wg mnie to nie jest zadna wada. Przynajmnije dokaldnie widac co bedzie w a po wykonaniu tego.
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
=?ISO-8859-2?Q?Mateusz_=A3oskot?= - 24-01-2006 10:44
Marcin Mielżyński wrote: > Mateusz Łoskot wrote: >> >>> any a="string"; // ? >> >> boost::any a = std::string("asdf"); >> >> albo >> >> boost::any a(std::string("asdf")); >> > > No właśnie to miało wyjść na jaw, jest niepełny...
Co jest niepełne? Takie jest wymaganie boost::any, że ValueType przechowywany musi być wspierać kopiowanie i przypisywanie, więc jakbyś to widział dla zwykłego char*? W C++ std::string jest zalecanym sposobem zabawy z napisami, jeśli chcesz tutaj w interfejsie używać napisów z języka C, to nic nie stoi na przeszkodzie aby opakować sobie boost::any strukturą wraz z konstrukorem, który zezwoli na konwersję char* do std::string implicite.
IMHO sprzeczki "ja wolę char* od std::string" to sztuka dla sztuki.
Pozdrawiam -- Mateusz Łoskot http://mateusz.loskot.net
Michal Przybylek - 25-01-2006 15:39
=?iso-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
"Piotr Dembiński" <pdemb@gazeta.pl> wrote:
> W gruncie rzeczy miałem nadzieję na odesłanie do jakiejś > szacownej pozycji literaturowej,
Powazni ludzie nie zajmuja sie tak niepowaznymi rzeczami, zas czytanie niepowaznych ludzi jest delikatnie mowiac... niepowazne.
Powaznie.
Matematycznie te pojecia maja bardzo niewielki sens (roznica jest taka, ze funkcja semantyczna ma w jednym przypadku takie-a-takie wlasnosci, a w drugim inne).
Informatycznie najlepiej definiowac te pojecia przez ekstensje (bo inaczej moze sie okazac, ze wszystkie uzywane w praktyce jezyki sa np. imperatywne) :-)
> ale jak już zaczynasz kombinować z semantyką, > to osobiście widzę to tak, że imperatywny język programowania to taki > język, którego semantykę można w naturalny sposób zdefiniować > na maszynie RAM. Analogicznie: semantykę języka funkcyjnego można > w naturalny sposób zdefiniować na rachunku lambda.
To jest wlasnie to drugie podejscie do rozumienia imperatywnosci, nieformalne. Myslenie o programie jak o pewnym przebiegu wykonania, zmieniajacym na swojej drodze stany.
Uwaga, te dwa podejscia do rozumienia nie sa sobie rownowazne.
> Problem w tym, że przy takim podejściu nie wiemy, co dokładnie > znaczy fraza 'naturalny sposób' :>
Akurat "naturalny sposob" ma scisla matematyczna definicje. Nie, nie taka, jakiej sie moglbys spodziewac :-)
mp
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 25-01-2006 15:40
"Michal Przybylek" <mrp@neostrada.pl> writes:
> "Piotr Dembiński" <pdemb@gazeta.pl> wrote: > >> W gruncie rzeczy miałem nadzieję na odesłanie do jakiejś >> szacownej pozycji literaturowej, > > Powazni ludzie nie zajmuja sie tak niepowaznymi rzeczami,
Niepoważnymi? Jest podział na imperatywne i deklaratywne, to ja się pytam, gdzie znajdę normalne, ludzkie definicje tych pojęć. I nie chodziło mi o żadne monografie, tylko o link do jakiegoś poważnego słownika informatycznego lub czegoś w tym stylu.
[...]
> Matematycznie te pojecia maja bardzo niewielki sens (roznica jest > taka, ze funkcja semantyczna ma w jednym przypadku takie-a-takie > wlasnosci, a w drugim inne).
Ostatnio przeglądałem sobie strony WWW i wyszło mi, że samych sposobów definiowania semantyki języka prog. jest co najmniej kilka.
> Informatycznie najlepiej definiowac te pojecia przez ekstensje (bo > inaczej moze sie okazac, ze wszystkie uzywane w praktyce jezyki sa > np. imperatywne) :-)
ZTCW to wszystkie, które mają interpretery, są implementowane na maszynach działających zgodnie z założeniami maszyny RAM: Intelach,SPARCach etc.
>> ale jak już zaczynasz kombinować z semantyką, to osobiście widzę >> to tak, że imperatywny język programowania to taki język, którego >> semantykę można w naturalny sposób zdefiniować na maszynie RAM. >> Analogicznie: semantykę języka funkcyjnego można w naturalny sposób >> zdefiniować na rachunku lambda. > > To jest wlasnie to drugie podejscie do rozumienia imperatywnosci, > nieformalne. Myslenie o programie jak o pewnym przebiegu wykonania, > zmieniajacym na swojej drodze stany. > > Uwaga, te dwa podejscia do rozumienia nie sa sobie rownowazne.
Jasne. Chodziło mi o tę ściślejszą definicję, ew. intuicyjną, tylko podaną przez jakiś światowej klasy autorytet.
>> Problem w tym, że przy takim podejściu nie wiemy, co dokładnie >> znaczy fraza 'naturalny sposób' :> > > Akurat "naturalny sposob" ma scisla matematyczna definicje. Nie, nie > taka, jakiej sie moglbys spodziewac :-)
To taki 'matematyczny naturalny sposób', który istnieje na podobnej zasadzie jak matematyczne pojęcie ideału w (bodajże) algebrze abstrakcyjnej?
-- http://www.piotr.dembiński.prv.pl
Michal Przybylek - 25-01-2006 15:40
=?iso-8859-2?Q?Re:_lista_dowolnych_typ=F3w?=
"Piotr Dembiński" <pdemb@gazeta.pl> wrote:
> > Powazni ludzie nie zajmuja sie tak niepowaznymi rzeczami, > > Niepoważnymi? Jest podział na imperatywne i deklaratywne, to ja się > pytam, gdzie znajdę normalne, ludzkie definicje tych pojęć.
Nie ma takiego podzialu. Jest tylko duzo szumu i machania rekami. Kazdy rozumie przez te pojecia, to co mu wygodnie. I ja sie smieje z wiekszosci z tych rozumien...
W jakims sensie jest "cos" w tym rozgraniczeniu, ale to "cos" bazuje mocno na osobistych uczuciach, ktore krystalizuja sie w miare praktyki i obcowania z oboma podejsciami.
Ja, jak mowilem wczesniej, pewnie dal bym rade zdefiniowac formalnie wlasne odczucia. Ale watpie aby to bylo z jakichkolwiek wzgledow ciekawe.
> Jasne. Chodziło mi o tę ściślejszą definicję, ew. intuicyjną, tylko > podaną przez jakiś światowej klasy autorytet.
Zdanie nie nabiera sensu na wiesc, ze zostalo wypowiedziane przez autorytet.
> > Akurat "naturalny sposob" ma scisla matematyczna definicje. Nie, nie > > taka, jakiej sie moglbys spodziewac :-) > > To taki 'matematyczny naturalny sposób', który istnieje na podobnej > zasadzie jak matematyczne pojęcie ideału w (bodajże) algebrze > abstrakcyjnej?
Troche inaczej (pozatym, ze pojecia idealu nie definiuje sie ogolnie w algebrze).
To bylo tak, ze najpierw pojawily sie pewne "schematy przejsc" (w topologii), ktore wygladaly tak naturalnie, ze az chcialo sie zdefiniowac je formalnie. Ale do ich definicji na odpowiednim poziomie ogolnosci potrzeba bylo zbudowac cala nowa piekna teorie. Tak wlasnie, w ubieglym wieku MacLane wprowadzil do matematyki...
Czyli, to my mielismy "naturalne przejscia" i one istnialy. A do tego, aby je dobrze zdefiniowac dorobilismy teorie. W tym sensie "naturalne przejscia" sa czyms pierwotnym ("naturalny sposob" to sposob za pomoca "naturalnego przejscia").
Przy czym, od rzeczy naturalnych dla topologa normalnym ludziom wlos na glowie sie jezy :-)
mp
Marcin 'Qrczak' Kowalczyk - 25-01-2006 15:40
pdemb@gazeta.pl (Piotr Dembiński) writes:
> Chodziło właśnie o funkcjonalność: insert, remove, append, pop. > To wszystko jest w listach pajtonowych. Nie analizowałem złożoności > czasowych, ale chyba jak się nazywają 'listy', to mają takie, jak > podałeś.
Wydaje mi się, że słowo "lista" jest mocno wieloznaczne.
Może oznaczać to, co ja nazywam "ciągiem" ("sequence"), czyli ogólny rodzaj struktury danych, abstrahując od efektywności i reprezentacji. Może też oznaczać różne konkretne struktury danych, przy czym różne rodzaje list mają różne zestawy szybkich operacji.
Podstawowe rodzaje listy są takie:
1. Jednokierunkowe, immutable, używane w sposób funkcyjny.
Operacje O(1): uzyskanie listy z elementem dodanym albo usuniętym na początku.
Przykłady: SML, OCaml, Erlang, Kogut.
2. Jednokierunkowe, mutable, używane w sposób funkcyjny.
Operacje O(1): uzyskanie listy z elementem dodanym albo usuniętym na początku, rozcięcie listy (mając wskaźnik w środek), połączenie dwóch list (mając wskaźnik na koniec pierwszej).
Przykłady: Lisp, Scheme, Dylan.
3. Jednokierunkowe, mutable, używane w sposób imperatywny.
Operacje O(1): dodanie albo usunięcie elementu na początku, rozcięcie listy (mając wskaźnik w środek), połączenie dwóch list (mając wskaźnik na koniec pierwszej).
4. Dwukierunkowe, mutable, używane w sposób imperatywny.
Operacje O(1): dodanie albo usunięcie elementu na początku albo na końcu, rozcięcie listy (mając wskaźnik w środek), połączenie dwóch list.
Przykład: C++ (częściowo, bo rozcięcie nie ma gwarantowanego stałego czasu i w różnych implementacjach jest różnie, bo niektóre trzymają w liście długość, co w tym przeszkadza).
Java ma LinkedList, które mogłoby należeć do 4 grupy, ale nie wykorzystuje potencjału reprezentacji: nie ma rozcinania ani łączenia.
>> (Ściśle mówiąc te O(1) są oszukane, ale nie chcę wnikać.) > > Chodzi o koszt amortyzowany?
Nie. Przy strukturze wielkości N wskaźnik albo indeks ma wielkość log N, więc teoretycznie wszystkie operacje na wskaźnikach i indeksach mają koszt co najmniej O(log N).
W praktyce tego nie widać, bo N i tak jest ograniczone przez stałą (rozmiar pamięci), więc log N też jest stałą zależną od architektury (np. 32 albo 64). Formalny asymptotyczny koszt nie wystarcza do oceny, co jest szybsze; może być tak, że dla rozmiarów danych spotykanych w praktyce stałe współczynniki mają większy wpływ niż jakiś czynnik log N.
-- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/
=?iso-8859-2?q?Piotr_Dembi=F1ski?= - 25-01-2006 15:40
Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> writes:
> pdemb@gazeta.pl (Piotr Dembiński) writes: > >> Chodziło właśnie o funkcjonalność: insert, remove, append, pop. >> To wszystko jest w listach pajtonowych. Nie analizowałem złożoności >> czasowych, ale chyba jak się nazywają 'listy', to mają takie, jak >> podałeś. > > Wydaje mi się, że słowo "lista" jest mocno wieloznaczne. > > Może oznaczać to, co ja nazywam "ciągiem" ("sequence"), czyli ogólny > rodzaj struktury danych, abstrahując od efektywności > i reprezentacji. Może też oznaczać różne konkretne struktury danych, > przy czym różne rodzaje list mają różne zestawy szybkich operacji.
Właśnie sobie przypomniałem, że ISO udostępnia na swojej stronie internetowej standard 11404, w którym są zdefiniowane struktury danych, m.in. sekwencje i tablice. Można by porównać z pajtonowymi.
[...]
>>> (Ściśle mówiąc te O(1) są oszukane, ale nie chcę wnikać.) >> >> Chodzi o koszt amortyzowany? > > Nie. Przy strukturze wielkości N wskaźnik albo indeks ma wielkość > log N, więc teoretycznie wszystkie operacje na wskaźnikach > i indeksach mają koszt co najmniej O(log N).
Jak się abstrahuje od sprzętu, to nawet operacje na liczbach 32-bitowych mają swoje złożoności czasowe zależne od długości liczby.
> W praktyce tego nie widać, bo N i tak jest ograniczone przez stałą > (rozmiar pamięci), więc log N też jest stałą zależną od architektury > (np. 32 albo 64). Formalny asymptotyczny koszt nie wystarcza > do oceny, co jest szybsze; może być tak, że dla rozmiarów danych > spotykanych w praktyce stałe współczynniki mają większy wpływ niż > jakiś czynnik log N.
ZTCW to utarło się, że najpierw patrzymy na koszt asymptotyczny. Analiza kosztów stałych to w gruncie rzeczy kwestia dla ludzi od optymalizacji na konkretny sprzęt.
-- http://www.piotr.dembiński.prv.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?q?NET_i_ODBC_-_Lista_dostawc=F3w_danych?=
Sql Serv 2000 - String z lista parametrem funkcji ?
[Struts] rozwijana lista za pomoca html:optionsCollection
Lista =?ISO-8859-2?Q?uporz=B1dkowana?= w relacji
OPTIMA - lista =?ISO-8859-2?Q?kontrahent=F3w?=
Lista poslow, ktorzy nie poparli zycia
Lista mailingowa - czy jest taka opcja??
exceptions w PL/SQL - lista
[MSSQL] Lista baz
firebird lista uzytkownikow
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|