-
X-Received: by 2002:aed:3ed5:: with SMTP id o21mr3288538qtf.369.1566541113936; Thu,
22 Aug 2019 23:18:33 -0700 (PDT)
X-Received: by 2002:aed:3ed5:: with SMTP id o21mr3288538qtf.369.1566541113936; Thu,
22 Aug 2019 23:18:33 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
e.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2
.proxad.net!209.85.160.216.MISMATCH!f14no6904836qtq.0!news-out.google.com!d29ni
2633qtg.1!nntp.google.com!f14no6904826qtq.0!postnews.google.com!glegroupsg2000g
oo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Thu, 22 Aug 2019 23:18:33 -0700 (PDT)
In-Reply-To: <b...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.70;
posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 165.225.84.70
References: <5...@g...com>
<b...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3...@g...com>
Subject: Re: Sortowanie bąbelkowe
From: Maciej Sobczak <s...@g...com>
Injection-Date: Fri, 23 Aug 2019 06:18:34 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:213824
[ ukryj nagłówki ]> Spośród rozwiązań na Rosetta Code to w Wolframie jest niewątpliwie najładniejsze:
>
> bubbleSort[{w___, x_, y_, z___}] /; x > y := bubbleSort[{w, y, x, z}]
> bubbleSort[sortedList_] := sortedList
Tak, w tym wypadku wzorzec (i to razem z warunkiem) jest w "sygnaturze" funkcji. To
pokazuje, że w Wolframie wywołanie funkcji nie działa tak samo jak w innych językach,
tylko jest podmianą pasującego wzorca. Z punktu widzenia innych języków to powyżej to
"przeciążanie" funkcji, ale widać, że wtedy przeciążanie na podstawie liczby albo
typów argumentów to zaledwie kropelka w morzu tego, co da się takim mechanizmem
zrobić.
Przyznam jednak, że o ile ten mechanizm ma wysoką teoretyczną estetykę (pomijając
rekurencję w tym przykładzie, która to rekurencja nie ma żadnej wartości dodanej i
jest ogólnie fuj), to mam opory przed jego szerszym użyciem. Może ograniczają mnie
stare przyzwyczajenia, ale pewniej się czuję z wzorcami ukrytymi wewnątrz funkcji,
tak jak w moim pierwszym przykładzie. To, że te dwa podejścia są wymienne widać też
po tym, że nawet ilość kodu jest taka sama (ale rekurencja jest fuj).
Natomiast funkcja FixedPointLoop ma ciekawą cechę, że daje pośrednie wyniki
(FixedPoint daje tylko ostateczny) - pięknie się to nadaje do wizualizacji przebiegu
obliczeń. Wystarczy na wyniku zaaplikować funkcję np. ArrayPlot i mamy prezentację
bąbelków, które w kolejnych wierszach płyną na swoje miejsca.
https://reference.wolfram.com/language/ref/ArrayPlot
.html
I w kilku linijkach mamy gotową lekcję informatyki.
> Szkoda tylko, że taka brzydka interpunkcja ;]
Interpunkcja to skróty dla tych, co lubią skróty. Dla tych co nie lubią (ta sama
funkcja):
oneBubbleStep[lst_]:=ReplaceAll[lst,
Rule[Condition[
List[Pattern[pre, BlankNullSequence[]], Pattern[a, Blank[]],
Pattern[b, Blank[]], Pattern[post, BlankNullSequence[]]],
Greater[a, b]], List[pre, b, a, post]]]
Tak to widzi Wolfram w środku, zawsze. Człowiek ma wybór.
--
Maciej Sobczak * http://www.inspirel.com
Następne wpisy z tego wątku
- 23.08.19 09:29 g...@g...com
- 23.08.19 10:34 Maciej Sobczak
Najnowsze wątki z tej grupy
- 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)
- 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
Najnowsze wątki
- 2025-01-06 Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- 2025-01-06 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-06 Do IO i innych elektrooszolomow, tu macie prawdziwe smrody
- 2025-01-06 Białystok => Full Stack .Net Engineer <=
- 2025-01-06 Kraków => Business Development Manager - Network and Network Security
- 2025-01-06 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-06 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-06 Lublin => Programista Delphi <=
- 2025-01-06 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-06 śnieg
- 2025-01-05 Żarówka do lampy z czujnikiem ruchu
- 2025-01-05 Rozkręcają się
- 2025-01-04 pozew za naprawę sprzętu na youtube
- 2025-01-04 gasik
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją