-
Data: 2018-01-05 14:09:31
Temat: Re: Co jest nie tak z C++ (było: Rust)
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu piątek, 5 stycznia 2018 11:51:07 UTC+1 użytkownik Maciej Sobczak napisał:
> > I mówiąc to, mam na myśli, że przy pomocy rekurencji można zdefiniować
> > iterację, natomiast przy pomocy iteracji nie można zdefiniować rekurencji.
>
> Tak. Rekurencja jest bardziej ogólnym mechanizmem w tym sensie, że uogólnia pojęcie
powtórzenia. I to wcale nie sprawia, że jest łatwiejsza do zrozumienia.
Nie sprawia. Ale nie sprawia też, że jest trudniejsza do zrozumienia.
Jak wspominałem w toku naszej dyskusji, są zagadnienia, których nie
potrafimy zrozumieć inaczej, niż rekurencyjnie.
> > I w tym sensie iteracja jest prostsza od rekurencji, że ma mniejszą
> > siłę wyrazu (można przy jej pomocy zrobić mniej)
>
> Zgadza się. Ale iteracja ma jedną gigantyczną zaletę: można przy pomocy iteracji
zrobić iterację. I tam, gdzie potrzebna/wystarczajaca jest iteracja, wybór iteracji
jako narzędzia jest bardziej właściwy - prostszy mechanizm, który potrafi mniej, jest
wtedy łatwiejszy do zrozumienia. Bywa, że jest wtedy też bardziej wydajny. Dlatego
używanie rekurencji do robienia iteracji jest przerostem formy, być często nawet
zwykłym snobizmem.
Co do istoty, iteracja nie jest bardziej wydajna, niż rekurencja,
bo iteracja jest tylko specjalizacją rekurencji.
Dobrze jest to wyjasnione w "Strukturze i Interpretacji Programów
Komputerowych", gdzie odróżnia się rekurencyjne i iteracyjne procesy
obliczeniowe od rekurenyjnych i iteracyjnych definicji (środka wyrazu).
> Analogia warsztatowa: zwykły młotek może zrobić mniej, niż kombajn ogólnego
przeznaczenia func'o'matic. I dlatego do wielu zastosowań młotek będzie lepszym
wyborem. A warsztat, który w ogóle nie ma młotka, jest po prostu nieużyteczny, nawet
jeśli ma kombajn func'o'matic.
Analogia jest o tyle nietrafna, że w przypadku dyskusji "rekurencja
vs. iteracja" mamy do czynienia nie tylko z aspektem możliwości, ale również
złożoności. Młotek może mniej niż kombain func'o'matic, ale młotek jest też
prostszy (mniej złożony) od takiego kombajnu.
Rekurencja natomiast zarówno może więcej (jest mniej wyspecjalizowana),
jak również jest prostsza (w sensie złożoności) od iteracji.
To jest istotne o tyle, że gdyby ktoś trzymał się dwóch zasad:
"stosuj najprostsze narzędzia dla osiągnięcia danego celu"
oraz
"do danego celu stosuj narzędzia wymagające jak najmniejszej mocy",
to te dwie raczej (wg. mnie) rozsądnie brzmiące maksymy mogą w wielu
sytuacjach stać ze sobą w sprzeczności.
Istotna wydaje się też kwestia przypadkowej złożoności.
W przypadku podanego przez Ciebie przykładu, zrozumienie zapisu x[[1 ;; ;; 2]]
wymaga odwołania do dokumentacji - składnia Mathematiki jest źródłem
przypadkowej złożoności, bo jej znaczenia nie da się wywnioskować
z "pierwszych zasad". W rozwiązaniu Kaya jedyna przypadkowa złożoność
jest w nazwach. Ale w tej kwestii z pomocą przychodzi nam dorobek
Burstalla, który rozszerzył ISWIM o pattern-matching, i teraz
np. w takim Haskellu zamiast
where odds(x) = if null(x) ? null(tl(x)) then x
else hd(x) & odds(ttl(x))
evens(x) = if null(x) ? null(tl(x)) then nil
else odds(tl(x))
napisalibyśmy raczej coś w stylu
where odds(o:e:xs) = o:odds(xs)
odds(xs) = xs
evens(o:xs) = odds(xs)
evens(xs) = []
W tym przypadku złożoność przypadkowa została praktycznie wyrugowana
do minimum: zasadniczo wszystko można wywnioskować z "pierwszych zasad"
> Używajmy właściwych narzędzi do ich najbardziej naturalnych zastosowań, gdzie słowo
"naturalne" zostawię już bez rozwinięcia, bo rozgrzebywanie takich definicji nie jest
moją intencją na tej grupie.
Myślę, że nikt tutaj nie będzie się spierał o to, żeby używać narzędzi
do ich najbardziej naturalnych zastosowań, i jedynym, o co można się
spierać, jest to jak należy rozumieć słowo "naturalne".
Następne wpisy z tego wątku
- 05.01.18 22:57 Roman Tyczka
- 07.01.18 22:19 Maciej Sobczak
- 07.01.18 22:30 Maciej Sobczak
- 07.01.18 23:00 g...@g...com
- 08.01.18 14:20 Maciej Sobczak
- 08.01.18 20:25 g...@g...com
- 09.01.18 13:35 Maciej Sobczak
Najnowsze wątki z tej grupy
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- 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
Najnowsze wątki
- 2025-05-17 Warszawa => Senior IT Recruitment Consultant <=
- 2025-05-17 Warszawa => DevOps Engineer <=
- 2025-05-17 Warszawa => Junior Account Manager <=
- 2025-05-17 Warszawa => Senior Programmer C <=
- 2025-05-17 Polska => Senior Key Account Manager <=
- 2025-05-17 Migracje i przestępczość
- 2025-05-16 czy Seba naprawdę wróci do macierzy?
- 2025-05-15 coś pustawo u mechaników
- 2025-05-16 Warszawa => IT Data Analyst (obszar Power BI) <=
- 2025-05-16 Warszawa => Senior Backend Developer <=
- 2025-05-16 Warszawa => IT Hardware Specialist - Wsparcie i Konfiguracja <=
- 2025-05-16 Gliwice => Business Development Manager - Network and Network Security
- 2025-05-16 Warszawa => Team Lead Data Engineer (Snowflake) <=
- 2025-05-16 Poznań => Key Account Manager (ERP) <=
- 2025-05-16 Białystok => Team Lead Data Engineer (obszar Snowflake) <=