eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zrobić grupowanie w kolejności › Re: Jak zrobić grupowanie w kolejności
  • X-Received: by 2002:a0c:d4e2:: with SMTP id y31mr32900259qvh.194.1574184597822; Tue,
    19 Nov 2019 09:29:57 -0800 (PST)
    X-Received: by 2002:a0c:d4e2:: with SMTP id y31mr32900259qvh.194.1574184597822; Tue,
    19 Nov 2019 09:29:57 -0800 (PST)
    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!j16no4280385qtl.0!news-out.google.com!p4ni1
    183qtu.1!nntp.google.com!j16no4280376qtl.0!postnews.google.com!glegroupsg2000go
    o.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 19 Nov 2019 09:29:57 -0800 (PST)
    In-Reply-To: <5dd41a1d$0$544$65785112@news.neostrada.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.68.153;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 213.192.68.153
    References: <5dd2981a$0$17364$65785112@news.neostrada.pl>
    <9...@g...com>
    <5dd2e826$0$17359$65785112@news.neostrada.pl>
    <0...@g...com>
    <f...@g...com>
    <5dd3e574$0$511$65785112@news.neostrada.pl>
    <3...@g...com>
    <5dd41a1d$0$544$65785112@news.neostrada.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Re: Jak zrobić grupowanie w kolejności
    From: g...@g...com
    Injection-Date: Tue, 19 Nov 2019 17:29:58 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:214462
    [ ukryj nagłówki ]

    W dniu wtorek, 19 listopada 2019 17:37:28 UTC+1 użytkownik Borneq napisał:

    > > Tutaj jest Pythonowa wersja, w której umieściłem Haskellowe patterny i guardy w
    komentarzach
    > > return group(t, g+[h]) ### -- warunek niespelniony
    > > if g:
    > > return [g] ### grouped [] g -- grupa jest niepusta
    > > return [] ### grouped [] [] -- pusta grupa
    > > return group(l, [])
    >
    > To jest jakaś rekurencja ogonowa, którą można przenieść na pętlę nie
    > zajmując stosu?

    Nie, w tym przypadku rekurencja nie jest ogonowa, bo jedno z wywołań rekurencyjnych
    jest zagnieżdżone w wywołanie innej funkcji (sklejania list).
    Chodzi konkretnie o linię:

    return [g+[h]]+group(t, [])

    Typowo jeśli chcielibyśmy przekształcić taką rekurencję w rekurencję ogonową,
    musielibyśmy stworzyć dodatkowy argument reprezentujący wynik.

    Możemy tak zrobić, jeśli strukutra rekurencji jest liniowa (albo inaczej:
    nie-drzewiasta). Wersja Pythonowa zapisana z rekurencją ogonową wyglądałaby tak:

    def trgroups(l, cond):
    def group(l, g, out):
    if l:
    h, *t = l
    if cond(g+[h]):
    return group(t, [], out+[g+[h]])
    return group(t, g+[h], out)
    if g:
    return out+[g]
    return out
    return group(l, [], [])

    Takie coś rzeczywiście nie powinno zajmować stosu w implementacjach optymalizujących
    rekurencję ogonową (do których Pythony raczej się nie zaliczają)

    Tutaj link:
    https://rextester.com/FCY59693

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 20.11.19 01:00 M.M.

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: