-
X-Received: by 10.31.49.200 with SMTP id x191mr905395vkx.19.1507097707929; Tue, 03
Oct 2017 23:15:07 -0700 (PDT)
X-Received: by 10.31.49.200 with SMTP id x191mr905395vkx.19.1507097707929; Tue, 03
Oct 2017 23:15:07 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-medi
a.com!news.highwinds-media.com!6no378719qtw.1!news-out.google.com!s12ni702qtk.1
!nntp.google.com!6no378718qtw.1!postnews.google.com!glegroupsg2000goo.googlegro
ups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Tue, 3 Oct 2017 23:15:07 -0700 (PDT)
In-Reply-To: <4...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=46.186.90.250;
posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 46.186.90.250
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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <5...@g...com>
Subject: Re: Optymalizacja struktur danych dla programów funkcyjnych
From: g...@g...com
Injection-Date: Wed, 04 Oct 2017 06:15:07 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Body-CRC: 1392382669
X-Received-Bytes: 7054
Xref: news-archive.icm.edu.pl pl.comp.programming:211556
[ ukryj 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
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-03 Praktyczny test GPS...
- 2024-12-02 Tak się sprzedają elektryczne woldzwageny ;-)
- 2024-12-02 Akumulator do Hyundai
- 2024-12-02 Olsztyn => Sales Specialist <=
- 2024-12-02 Poznań => Technical Artist <=
- 2024-12-02 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-02 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2024-12-02 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-02 Białystok => Delphi Programmer <=
- 2024-12-02 Poznań => Dyspozytor Międzynarodowy <=
- 2024-12-02 Szczecin => Key Account Manager (ERP) <=
- 2024-12-02 Poznań => Senior PHP Developer <=
- 2024-12-03 Usiłuję zapłacić za energetyzację...
- 2024-12-02 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-12-02 Kraków => Full Stack .Net Engineer <=