-
Data: 2017-10-04 08:15:07
Temat: Re: Optymalizacja struktur danych dla programów funkcyjnych
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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.
Następne wpisy z tego wątku
- 04.10.17 18:36 M.M.
- 04.10.17 20:02 Roman Tyczka
- 04.10.17 20:58 g...@g...com
- 05.10.17 01:37 Maciej Sobczak
- 05.10.17 08:28 g...@g...com
- 05.10.17 13:48 Maciej Sobczak
- 05.10.17 18:58 g...@g...com
- 06.10.17 14:01 Maciej Sobczak
- 06.10.17 19:59 g...@g...com
- 07.10.17 23:22 Maciej Sobczak
- 08.10.17 10:47 g...@g...com
- 08.10.17 23:30 Maciej Sobczak
- 09.10.17 07:58 g...@g...com
- 09.10.17 14:25 Maciej Sobczak
- 09.10.17 18:12 fir
Najnowsze wątki z tej grupy
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
Najnowsze wątki
- 2025-05-06 trasa Londyn - Koszalin
- 2025-05-06 "Unia Europejska poważnie myśli o wprowadzeniu całkowitego zakaz importu gazu
- 2025-05-05 Jak naładować akumulator iRobot DC 14,4V 3300 mAh zasilaczem ?
- 2025-05-05 Kopanie Bitcoinów kosztuje 137.000 $, więcej niż cena 95.000 $
- 2025-05-05 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-05-05 Kraków => Production Coordinator / Representant Product Dev <=
- 2025-05-05 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-05-05 Gdańsk => Senior Node.js Developer (doświadczenie z framework Nest.j
- 2025-05-05 Salwador
- 2025-05-05 Gdańsk => Controlling systems Consultant <=
- 2025-05-05 Czeladź => Key Account Manager IT <=
- 2025-05-05 Zielona Góra => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, P
- 2025-05-05 Gdańsk => Senior Node.js Developer (Nest.js framework) <=
- 2025-05-05 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-05-05 Kraków => NMS System Administrator <=