eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOptymalizacja struktur danych dla programów funkcyjnychRe: Optymalizacja struktur danych dla programów funkcyjnych
  • X-Received: by 10.31.170.19 with SMTP id t19mr1031274vke.26.1507134975839; Wed, 04
    Oct 2017 09:36:15 -0700 (PDT)
    X-Received: by 10.31.170.19 with SMTP id t19mr1031274vke.26.1507134975839; Wed, 04
    Oct 2017 09:36:15 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.
    iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!6no6164
    66qtw.1!news-out.google.com!p42ni2442qtp.0!nntp.google.com!d13no797318qta.0!pos
    tnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Wed, 4 Oct 2017 09:36:14 -0700 (PDT)
    In-Reply-To: <5...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=178.36.217.201;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 178.36.217.201
    References: <c...@g...com>
    <4...@g...com>
    <b...@g...com>
    <d...@g...com>
    <f...@g...com>
    <b...@g...com>
    <1...@g...com>
    <4...@g...com>
    <5...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <b...@g...com>
    Subject: Re: Optymalizacja struktur danych dla programów funkcyjnych
    From: "M.M." <m...@g...com>
    Injection-Date: Wed, 04 Oct 2017 16:36:15 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 130
    Xref: news-archive.icm.edu.pl pl.comp.programming:211558
    [ ukryj nagłówki ]

    On Wednesday, October 4, 2017 at 8:15:08 AM UTC+2, g...@g...com wrote:
    > W dniu środa, 4 października 2017 00:21:38 UTC+2 użytkownik Maciej Sobczak napisał:
    > > > Nie. Na przykład unixowe polecenia takie jak mkdir czy rm nie są czysto
    > > > funkcyjne, bo ich istotą jest wykonanie pewnego skutku ubocznego -- zmiana
    > > > pewnego stanu.
    > >
    > > Dokładnie to samo można powiedzieć o każdym programie, który cokolwiek produkuje
    na swoim wyjściu - bo operacje I/O (czyli również pisanie na stdout) to skutki
    uboczne. Nawet dokładnie tak się to nazywa w standardzie np. języka C.
    > >
    > > Czyli przeginając argument w drugą stronę, można powiedzieć, że wszystkie
    interesujące programy produkują jakieś skutki uboczne (w przeciwnym razie nie ma po
    co ich uruchamiać), więc zgodnie z Twoją definicją nie są "czysto funkcyjne". Czy
    znowu to pojęcie nie jest użyteczne.
    >
    > Otóż nie. Ale widzę, że po raz kolejny zamiast spróbować zrozumieć
    > pojęcie, starasz się je strolować i wmówić, że nie jest użyteczne.
    >
    > Można sobie pomyśleć program, który oblicza wartość jakiegoś programu
    > czysto funkcyjnego i wyświetla ją na ekran. (Na przykład takie coś
    > robi interpreter). Interpreter nie jest czysto funkcyjny, a obliczany
    > przez niego program jest.
    >
    > > > bazuje na operacji niedeterministycznej,
    > > > ponieważ losuje pewien obiekt.
    > >
    > > "Losowanie" generatorem liczb pseudolosowych jest deterministyczne, tak jak każda
    inna sekwencja operacji arytmetycznych. A odwoływanie się do zewnętrznych źródeł
    szumu jest operacją wejścia, czyli znowu mówimy o deterministycznym programie, który
    przetwarza wejście na wyjście - i który dla takiego samego szumu da zawsze te same
    wyniki. Czyli który dla takiego samego wejścia da takie same wyjście. Sorry.
    >
    > Widzę, że nie rozumiesz.
    > To, czy liczba jest pseudolosowa, czy nie jest, czy pochodzi z wejścia,
    > czy z kosmosu, nie ma znaczenia dla *ISTOTY* danego programu. Na tym
    > właśnie polega abstrakcja niedeterminizmu.
    >
    > > > Zatem nie jest ze swojej istoty czysto
    > > > funkcyjny.
    > >
    > > I dalej nie wiemy, co to niby miałoby oznaczać.
    >
    > No, jeżeli usilnie staramy się nie zrozumieć, co to oznacza,
    > to nie wiemy.
    >
    > > > Określenie "czysto funkcyjny" jest bardzo praktyczne, ponieważ
    > > > wyznacza środki analizy potrzebne do tego, żeby analizować dany
    > > > system.
    > >
    > > Łomatko.
    >
    > Może sobie poczytaj https://mitpress.mit.edu/sicp/full-text/sicp/book/no
    de10.html
    >
    > > > Systemy czysto funkcyjne można analizować w terminach
    > > > podstawień wartości wyrażeń za wyrażenia.
    > >
    > > Czyli wszystkie programy można tak analizować. Każdy program jest
    deterministyczną funkcją Input -> Output.
    > > Dlatego to pojęcie nie jest użyteczne.
    >
    > Dałem kilka kontrprzykładów. Systemy kolejkowe czasu rzeczywistego
    > nie są deterministyczną funkcją input->output. Być może mają komponenty,
    > które można w taki sposób analizować, ale ich istotą jest działanie
    > w czasie rzeczywistym, i reagowanie na zdarzenia w zależności od
    > jakiegoś ich wewnętrznego stanu.
    >
    > Natomiast programy w rodzaju kompilatorów, konwerterów LaTeXa,
    > sedów, są w istocie czysto funkcyjne w takim sensie, że dla określonego
    > wejścia dają określone wyjście i kropka. Pojęcie "wewnętrznego
    > stanu" nie należy do ich opisu.
    >
    > > > Bo rzeczywiście, wiele kompilatorów działa tak, że wykonuje pewien
    > > > efekt uboczny, np. sprawia, że na dysku pojawiają się jakieś pliki
    > > > (i czasem też znikają). Ale to nie należy do jego istoty, tylko
    > > > jest szczegółem implementacyjnym
    > >
    > > W ten sposób można opisać każdy program - tzn. że owszem, robi efekty uboczne
    przy okazji operacji I/O (które są potrzebne, że przeczytać wejście i wyprodukować
    coś na wyjściu), ale one nie należą do jego istoty, tylko są szczegółem
    implementacyjnym, więc...
    >
    > Nie, nie można.
    > Podałem podczas tej rozmowy kilka przykładów.
    > Istnieją programy, których istotą jest interakcja (np. gry komputerowe,
    > przeglądarki internetowe), takie, których istotą jest wykonanie
    > skutku ubocznego (np. mkdir albo rm), takie, które są w istocie
    > niedeterministyczne (jak wspomniany framework do algorytmów genetycznych).
    > A oprócz nich są programy czysto funkcyjne, które po prostu wyznaczają
    > przekształcenia jakichs wejść w jakieś wyjścia.
    > Dla mnie taki podział jest użyteczny. Jeżeli dla Ciebie nie jest,
    > to Twoja sprawa.

    Pytanie, czy dla ogółu jest użyteczny? Póki co, ja to nawet nie widzę
    wyraźnej granicy podziałów ani korzyści z dzielenia - ale to pewnie
    coś ze mną nie tak.

    Pozdrawiam

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: