eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOptymalizacja struktur danych dla programów funkcyjnych › Re: Optymalizacja struktur danych dla programów funkcyjnych
  • Data: 2017-10-05 01:37:43
    Temat: Re: Optymalizacja struktur danych dla programów funkcyjnych
    Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    > Można sobie pomyśleć program, który oblicza wartość jakiegoś programu
    > czysto funkcyjnego

    Ale nie ustaliliśmy jeszcze, co to znaczy, że program jest czysto funkcyjny. Twoje
    argumenty to machanie rękami, bo każdy z nich da się rozciągnąć w dowolną stronę, co
    pokazałem w obu kierunkach. W tej sytuacji określenie "program, który oblicza wartość
    prograamu czysto funkcyjnego" to machanie rękami do kwadratu, jeszcze bardziej
    nieużyteczne.

    > To, czy liczba jest pseudolosowa, czy nie jest, czy pochodzi z wejścia,
    > czy z kosmosu, nie ma znaczenia dla *ISTOTY* danego programu.

    I właśnie tej istoty szukamy. Jeżeli istotą jest przetwarzanie wejścia na wyjście, to
    wszystkie programy w istocie takie są. Natomiast jeśli jest nią generowanie efektów
    ubocznych, to też wszystkie takie są.

    > > I dalej nie wiemy, co to niby miałoby oznaczać.
    >
    > No, jeżeli usilnie staramy się nie zrozumieć, co to oznacza,
    > to nie wiemy.

    A może staramy się ujawnić dziury w definicji? Bo skoro nie potrafimy przekonująco
    wyjaśnić co jakieś pojęcie oznacza, to może problem jest z samym pojęciem albo z
    naszym przekonaniem, że je rozumiemy?

    > Może sobie poczytaj https://mitpress.mit.edu/sicp/full-text/sicp/book/no
    de10.html

    Nie zakładaj, że jeszcze nie czytałem. Nie każdy troll jest niekompetentny. :-)

    > 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.

    No to robimy ćwiczenie na wyobraźnię:

    1. *Narysuj* zdarzenia w środowisku i otoczeniu programu, w ich rozciągłości
    czasowej. Oś czasu, od lewej do prawej, z zaznaczonymi zdarzeniami, wartościami, itd.
    2. Zrób z tego obrazka plik, np. w formacie PNG. Czyli *jedną wartość*.
    3. Podobnie narysuj na osi czasu odpowiedź systemu na taką stymulację. Znowu, z
    odpowiednią skalą czasu, wartościami (tak, żeby po złożeniu tych dwóch obrazków
    powstał opis działania programu w czasie), itd.
    4. Z tego drugiego obrazka też zrób plik.

    Otóż okazuje się, że Twój "system czasu rzeczywistego" przetwarza pliki graficzne.
    Czyli przetwarza pojedyncze wartości. To, czy wczyta od razu cały plik z wejścia i
    wypluje cały plik na wyjściu, czy też będzie je przetwarzał po jednym pikselowym
    pasku wzdłuż jednego boku obrazka (czyli np. wzdłuż osi czasu, co odpowiada naszej
    percepcji działania w kontekście upływającego czasu) nie ma znaczenia dla istoty tego
    programu, którą jest transformacja jednego obrazka w drugi.
    Co ciekawe, ze względu na kwantyzację wszystkiego (łącznie z zegarem), takich
    obrazków jest duża, ale jednak skończona ilość (czyli użyteczne rozmiary i
    rozdzielczość obrazków są skończone). Czyli dałoby się nawet zrobić ten program jako
    jedną mapę.

    To teraz ten program jest "czysto funkcyjny", czy nie jest?

    > 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.

    O, to program przetwarzający obrazki też się łapie.

    > Podałem podczas tej rozmowy kilka przykładów.

    A ja każdy z nich wygiąłem tam, gdzie chciałem.
    Dlatego twierdzę, że pojęcia, którymi operujesz, są nieużyteczne.

    > 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.

    I teraz ten cały podział nie dotyczy istoty działania programu (bo ta istota jest
    zawsze taka sama), tylko sposobu, w jaki my, ludzie, danego programu użyjemy. Możemy
    odpalić program jednym strzałem albo też delektować się powolnym budowaniem wyniku,
    ale to jest ten sam program. Czyli dotyczy naszej percepcji a nie jest fundamentalnym
    atrybutem problemu, który dany program rozwiązuje. Bo problem jest zawsze ten sam.
    Dlatego rzeczy "czysto cośtam" zwykle nimi nie są.

    --
    Maciej Sobczak * http://www.inspirel.com

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: