Article View: pl.comp.programming
Article #215800Re: "Najbardziej imponujący kod, jaki widziałem"
From: godek.maciek
Date: Sat, 03 Aug 2019 22:37
Date: Sat, 03 Aug 2019 22:37
85 lines
6620 bytes
6620 bytes
W dniu sobota, 3 sierpnia 2019 21:51:13 UTC+2 użytkownik Maciej Sobczak napisał:
> > Czasem w radiu słyszę reklamy, że producent leku przeprowadził niezależne badania,
>
> Ale ten producent wziął dane z niezależnego serwisu (Rosetta Code). Ty też możesz te dane stamtąd wziąć.
Nawet zerknąłem z ciekawości.
Tak konkretniej to zerknąłem tutaj:
https://rosettacode.org/wiki/Levenshtein_distance
Rozwiązanie w Mathematice wyglądało tak:
EditDistance["kitten","sitting"]
->3
EditDistance["rosettacode","raisethysword"]
->8
Dla porównania rozwiązanie w Haskellu:
levenshtein :: Eq a => [a] -> [a] -> Int
levenshtein s1 s2 = last $ foldl transform [0 .. length s1] s2
where
transform ns@(n:ns1) c = scanl calc (n + 1) $ zip3 s1 ns ns1
where
calc z (c1, x, y) = minimum [y + 1, z + 1, x + fromEnum (c1 /= c)]
main :: IO ()
main = print (levenshtein "kitten" "sitting")
Czyli autorzy "rozwiązania" w Mathematice nie dostarczyli implementacji odległości Levenshteina, tylko skorzystali z wbudowanej. Wygląda zatem na to, że nawet nie zrozumieli reguł zabawy.
Przy takiej interpretacji rzeczywiście trudno się dziwić, że w Mathematice wychodzą najkrótsze implementacje.
> > - wiedzy o osobliwym zachowaniu wartości "Nothing"
>
> Bo właśnie to chciałem zaprezentować. Da się też bez tej wiedzy, czyli gorzej. Da się nawet tak samo źle, jak w Twoim przykładzie. Wolfram to bardzo uniwersalny język, może nawet udawać gorsze języki. :-)
>
> > Łatwo jest zdefiniować "only" przy pomocy "append-map" (czy flatMap, czy concatMap, jak zwał tak zwał)
> >
> > (define (only satisfying? elements)
> > (append-map (lambda (element)
> > (if (satisfying? element)
> > `(,element)
> > '()))
> > elements))
> >
> > Wygląda prawie tak samo, jak Twoja, tylko nie trzeba wymyślać "specjalnych elementów" o "magicznych właściwościach" i "niejasnym statusie ontycznym".
>
> No jak nie. Ja tam widzę pustą listę gdy warunek nie jest spełniony. Skąd mam wiedzieć, że pusta lista jest ignorowana przez append-map? Przecież mogła być też dodana do wyniku.
> A gdybym jednak chciał dodać pustą listę do wyniku?
To zamiast '() napisałbyś '(())
> > Najwidoczniej dla mnie prostota jest ważniejsza od wygody (którą Ty tutaj nazywasz "użytecznością"), a dla Ciebie na odwrót.
>
> Zgodziłbym się, gdyby Twoje przykłady były proste. Ale nie są.
Nie do końca wiem, które przykłady masz na myśli.
> [...]
> > Zaprawieni programiści Lispa nazywają ten proces "rytuałem przejścia".
>
> Rozumiem. Wspominałeś już to określenie, ale wcześniej nie zrozumiałem. Czyli "rytuał przejścia" to sytuacja, kiedy ktoś bez sukcesu próbuje usprawnić język i ostatecznie rezygnuje z tego, wracając do języka bez usprawnień.
Raczej: próbuje usprawnić język, ale w międzyczasie odnajduje perspektywę, w której okazuje się, że pozorne usprawnienia wcale nic nie usprawniają. Że zmiana kształtu koła nie sprawia, że koło staje się lepszym kołem. Że tym, co było przeszkodą, nie były niedoróbki języka, tylko nawyki programisty.
> A jest jakaś fajna nazwa na sytuację, kiedy ktoś bez sukcesu próbuje usprawnić język i ostatecznie rezygnuje z tego i zmienia język na lepszy?
Zauważyłem, że często (w naszych różnych rozmowach, nie tylko teraz) posługujesz się takimi określeniami, jak "lepszy" czy "gorszy", tak jakby one same w sobie coś znaczyły.
Być może ma sens mówienie o tym, że coś jest lepsze dla jakiegoś danego celu niż coś innego, albo że jest lepsze względem jakiegoś kryterium czy jakiejś miary, ale nie wydaje mi się, żeby można było w ogóle powiedzieć, że dany język jest w jakimś absolutnym sensie lepszy od jakiegoś innego języka.
> Nie wiem - rytuał wyjścia? odejścia? rozejścia?
> Musi być jakaś fajna nazwa.
Może "sytuacja utknięcia"?
Albo "nieprzejście rytuału przejścia"?
> > Być może sytuacja z Mathematiką ma się nieco inaczej, bo ona ma już wokół siebie stosunkowo dużą społeczność.
>
> To pewnie ludzie po rytuale wyjścia z LISPa. :-D
Nie wiem jacy to ludzie. Pytanie jest rzeczywiście ciekawe, ale mi brak narzędzi, żeby to ocenić. (Nie ukrywam jednak, że zdziwiłbym się, gdyby się okazało, że jakiś znaczący odsetek użytkowników Mathematiki miał wcześniej głębszy kontakt z Lispem)
> W porównaniu do poprzednich postów, w których próbowałeś wykazać, że nikt z tego nie korzysta, zauważam pozytywną zmianę.
Kiedy ja niby próbowałem coś takiego wykazać?
Technical Details
Message-ID:
<b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.us.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!b26no10114904qtq.0!news-out.google.com!a5ni1061qtd.0!nntp.google.com!b26no10114898qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:a346:: with SMTP id m67mr98585979qke.237.1564871863479; Sat, 03 Aug 2019 15:37:43 -0700 (PDT) X-Received: by 2002:a05:620a:15cd:: with SMTP id o13mr94768361qkm.273.1564871863339; Sat, 03 Aug 2019 15:37:43 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.us.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!b26no10114904qtq.0!news-out.google.com!a5ni1061qtd.0!nntp.google.com!b26no10114898qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Sat, 3 Aug 2019 15:37:43 -0700 (PDT) In-Reply-To: <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.25.232.40; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 83.25.232.40 References: <edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com> Subject: Re: "Najbardziej imponujący kod, jaki widziałem" From: godek.maciek@gmail.com Injection-Date: Sat, 03 Aug 2019 22:37:43 +0000 Lines: 131 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit