eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSortowanie bąbelkowe › Re: Sortowanie bąbelkowe
  • 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

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: