eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › "Najbardziej imponujący kod, jaki widziałem"
Ilość wypowiedzi w tym wątku: 42

  • 21. Data: 2019-08-05 14:58:49
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu poniedziałek, 5 sierpnia 2019 14:35:32 UTC+2 użytkownik Roman Tyczka napisał:

    > Raz spytałem, o ile pomnę to odpowiedzi nie było. Spytam jeszcze raz, dość
    > na temat, skąd ksywa "panicz"?

    Kiedyś kolega mnie tak przezwał, i mi zostało.
    (Dlaczego tak przezwał, tego nie wyjaśnił)
    Kontekst historyczny swego czasu szerzej opisałem tutaj:
    https://www.quora.com/What-is-something-you-wish-you
    -knew-when-you-first-started-functional-programming/
    answer/Panicz-Godek


  • 22. Data: 2019-08-05 22:29:33
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > Rozwiązanie Haskellowe, chociaż korzysta z funkcji wbudowanych, daje jednak
    możliwość zozumienia tego, co się dzieje pod spodem.

    Słuszna uwaga. Ale Mathematica ma inne cele. To nie jest narzędzie dla ludzi, którzy
    chcą wiedzieć, co się dzieje, tylko raczej co się stanie. Omawialiśmy to już w
    okolicy open-source. Przy użyciu funkcji EditDistance Mathematica daje odpowiedź na
    pytanie, jaka jest odległość między wektorami w jakiejś tam mierze.

    > Prosta sprawa - zmodyfikuj rozwiązanie w Mathematice tak, żeby koszt zamiany
    elementu wynosił 2 a nie 1.

    Pytanie jest fair i odpowiedź (również fair) jest taka: sam sobie policz. Możesz w
    Wolframie. Zaletą Wolframa jest to, że ma 5000+ gotowych odpowiedzi; nie jest jego
    wadą to, że nie wszystkie (nieskończoność!) odpowiedzi są gotowe - bo w ostatecznym
    porównaniu i tak jest lepiej, niż w językach, gdzie wszystko trzeba wyklepać ręcznie.

    > To też jest interesujące: czy algorytm Levenshteina napisany w Mathematice będzie
    działał równie szybko jak ten wbudowany?
    > Czy może ten wbudowany został zaimplementowany w C?

    Dobre pytanie. Nie wiemy. Co więcej, nawet gdybyśmy się dowiedzieli, to w kolejnej
    wersji produktu może być inaczej. I nawet nie chodzi o język implementacji, ale
    również o takie sprawy jak automatyczne wykorzystanie dostępnej równoległości albo
    specjalnego sprzętu obecnego w systemie. Również w tym sensie Mathematica jest
    narzędziem wysokopoziomowym.

    > W każdym razie zagadka "najkrótszego kodu" w Mathematice rozwiązana.
    > Każdy może wyciągnąć swoje wnioski.

    Tak. Wniosek jest taki, że statystycznie w Mathematice trzeba napisać najmniej kodu.
    To jest odpowiedź na zupełnie praktyczne pytanie kogoś, dla kogo komputer jest
    narzędziem pracy.

    > Bardziej taka analogia, że wystawiamy w wyścigu biegaczy i motocyklistów.
    > Raczej nikogo nie zdziwi, że motocykliści dojadą szybciej na metę. Ale raczej nie
    wnioskowałbym stąd, że kondycja motocyklistów jest lepsza.

    Ale osoba zamawiająca pizzę ma gdzieś kondycję gościa, który z dumą przynosi
    wystygniętego kapcia, i to jeszcze jak już wszyscy goście sobie poszli.

    > Funkcja "append-map" wymaga, żeby przekazana do niej funkcja zwracała listę.

    I w ten sposób zaprzeczasz swoim wcześniejszym pretensjom, że żeby coś tam zrozumieć
    w Wolframie, to trzeba znać działanie jego funkcji a może nawet trzeba przeczytać
    dokumentację. Z nazwy "append-map" nie wynika, że oczekuje list. Mapowanie ogólnie,
    zgodnie z nazwą, mapuje elementy. A tu proszę, xyz-map oczekuje listy.

    > Jeżeli masz jakieś pytania na temat mojej osobowości, to lepiej zapytaj

    Nie da się. W tym zakresie nikt nie potrafi się sam zdiagnozować, muszę więc polegać
    na swoich (subiektywnych) odczuciach.

    > W tym kontekście, jeżeli miałbym mówić o "wyższości czegoś nad czymś", to bym
    powiedział, że wkład Johna McCarthy'ego w rozwój informatyki był moim zdaniem większy
    od wkładu Stephena Wolframa

    Ależ nikt nie twierdzi inaczej. Ba, nawet Wolfram nie twierdzi, że ma jakikolwiek
    wkład w rozwój informatyki, on się raczej eksponował w innych obszarach. Natomiast
    to, że w celu ułatwienia sobie pracy w tych innych obszarach napisał program, który
    potem równolegle rozwinał się jako użyteczny produkt, jest niewątpliwie osiągnięciem,
    zarówno inżynierskim, jak i biznesowym.

    --
    Maciej Sobczak * http://www.inspirel.com


  • 23. Data: 2019-08-06 10:55:03
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > > Prosta sprawa - zmodyfikuj rozwiązanie w Mathematice tak, żeby koszt zamiany
    elementu wynosił 2 a nie 1.
    >
    > Pytanie jest fair i odpowiedź (również fair) jest taka: sam sobie policz.

    OK, żeby nie było, że jestem nieuprzejmy, i dla własnej zabawy, zrobiłem mały
    research w tej sprawie.
    Jest taka fajna funkcja:

    https://reference.wolfram.com/language/ref/SequenceA
    lignment.html

    Ta funkcja rozpisuje różnice między sekwencjami, z czego można wyciągnąć poszczególne
    operacje (usunięcie, wstawienie, zamiana). Jeżeli dobrze zrozumiałem ćwiczenie, to
    rozwiązeniem może być takie coś:

    myDistance[s1_, s2_] := Total[
    Min[#] + Max[#] & /@
    Cases[SequenceAlignment[s1, s2], a_List :> StringLength /@ a]
    ]

    Pozwoliłem sobie użyć skróconych (idiomatycznych) zapisów na podstawowe operacje
    mapowania i lambdy - skoro w innych językach są śmieszne znaczki, to ja też
    skorzystam.

    Wyrażenie Min+Max załatwia podwójne zliczenie zamian w porównaniu do
    wstawień/usunięć. Pełne wyrażenie dla dowolnych wag to:

    replacementCost*Min[#] + deletionCost*(Max[#] - Min[#])

    gdzie # to anonimowa para {del, ins}, gdzie del to ilość znaków do usunięcia a ins to
    ilość znaków do wstawienia; jeśli obie są niezerowe, to znaczy, że jest zastąpienie,
    więc np. para {3,5} oznacza, że są 3 znaki do zastąpienia i 2 do
    usunięcia/wstawienia. Wszystkie takie wartości są sumowane.
    Czy to jest prawidłowy sposób liczenia - nie wiem, ale tak to zrozumiałem.

    Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?

    Nadal jednak szukałbym gotowych implementacji tutaj (choćby po to, żeby skorzystać z
    optymalizacji, które ktoś zrobił za mnie):

    https://reference.wolfram.com/language/guide/Distanc
    eAndSimilarityMeasures.html

    I właśnie na tym polega użyteczność tego produktu.

    --
    Maciej Sobczak * http://www.inspirel.com


  • 24. Data: 2019-08-06 15:31:48
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 30.07.2019 o 15:58, g...@g...com pisze:
    > Hej,
    > gdyby ktoś był zainteresowany, to ostatnio opublikowałem na Quorze nieco
    przydługawy artykuł (czy może raczej "małą książkę"?) objaśniający technikę Friedmana
    i Byrda "uruchamiania ewaluatora od tyłu".
    >
    > https://www.quora.com/Can-you-explain-to-non-coders-
    the-most-impressive-code-youve-seen/answer/Panicz-Go
    dek
    >
    > W ogólności pytanie "jaki jest najbardziej imponujący kod, jaki widziałeś" wydaje
    mi się ciekawe, więc jeśli ktoś tu ma jakieś swoje obserwacje na ten temat, z chęcią
    bym się dowiedział.
    >
    > Pozdrawiam
    >
    Daję namiar:
    https://scholarworks.iu.edu/dspace/bitstream/handle/
    2022/8777/Byrd_indiana_0093A_10344.pdf

    "Relational Programming in miniKanren:Techniques, Applications,
    andImplementations"


  • 25. Data: 2019-08-06 15:45:59
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu wtorek, 6 sierpnia 2019 15:32:26 UTC+2 użytkownik Borneq napisał:

    > > gdyby ktoś był zainteresowany, to ostatnio opublikowałem na Quorze nieco
    przydługawy artykuł (czy może raczej "małą książkę"?) objaśniający technikę Friedmana
    i Byrda "uruchamiania ewaluatora od tyłu".
    > >
    > > https://www.quora.com/Can-you-explain-to-non-coders-
    the-most-impressive-code-youve-seen/answer/Panicz-Go
    dek
    > >
    > > W ogólności pytanie "jaki jest najbardziej imponujący kod, jaki widziałeś" wydaje
    mi się ciekawe, więc jeśli ktoś tu ma jakieś swoje obserwacje na ten temat, z chęcią
    bym się dowiedział.
    > >
    > > Pozdrawiam
    > >
    > Daję namiar:
    > https://scholarworks.iu.edu/dspace/bitstream/handle/
    2022/8777/Byrd_indiana_0093A_10344.pdf
    >
    > "Relational Programming in miniKanren:Techniques, Applications,
    > andImplementations"

    Posiłkowałem się tym, zwłaszcza przy obsłudze więzów.
    Inne źródło to artykuł Friedmanna i Hemanna o minimalistycznej wersji minikanrena
    zwanej "microkanren" (albo uKanren):

    http://webyrd.net/scheme-2013/papers/HemannMuKanren2
    013.pdf

    Ale jeśli ktoś ma za małą motywację do czytania, to jest też film warsztatowy:

    https://www.youtube.com/watch?v=0FwIwewHC3o

    Przyznam też, że pomocna była dla mnie lektura źródeł microkanrena w Haskellu (dzięki
    systemowi typów rozumiało mi się to dużo lepiej, niż implementację w Scheme):
    https://gist.github.com/msullivan/4223fd47991acbe045
    ec

    ale moja implementacja różni się na kilka istotnych sposobów od miniKanrena, bo
    mieliśmy inne priorytety - im zależało na przenośności i integrowalności ich języka w
    różnych środowiskach (i w pewnej mierze na wydajności), a mnie na czytelności języka
    i łatwości prezentacji


  • 26. Data: 2019-08-06 16:32:02
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 06.08.2019 o 15:45, g...@g...com pisze:
    > Przyznam też, że pomocna była dla mnie lektura źródeł microkanrena w Haskellu
    (dzięki systemowi typów rozumiało mi się to dużo lepiej, niż implementację w Scheme):
    > https://gist.github.com/msullivan/4223fd47991acbe045
    ec

    Co to znaczy microkanren w Haskellu?
    Czy ten mały program to interpreter w Haskellu składni schemapodobnej
    microkanrena czy też rozszerzenie Haskella i microkanren ma tu składnię
    haskelopoodbną?


  • 27. Data: 2019-08-06 16:39:36
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu wtorek, 6 sierpnia 2019 16:32:17 UTC+2 użytkownik Borneq napisał:

    > > Przyznam też, że pomocna była dla mnie lektura źródeł microkanrena w Haskellu
    (dzięki systemowi typów rozumiało mi się to dużo lepiej, niż implementację w Scheme):
    > > https://gist.github.com/msullivan/4223fd47991acbe045
    ec
    >
    > Co to znaczy microkanren w Haskellu?
    > Czy ten mały program to interpreter w Haskellu składni schemapodobnej
    > microkanrena czy też rozszerzenie Haskella i microkanren ma tu składnię
    > haskelopoodbną?

    Tzn. ma składnię wywiedzioną z Haskella (nie tyle "Haskellopodobną", tylko taką, na
    jaką Haskell naturalnie pozwala swoimi konstruktorami typów i funkcji anonimowych)

    na dole wklejonego powyżej linka jest kilka przykładów wyrażeń w Haskellowym
    microKanrenie.

    MiniKanren jako taki nie ma swojej składni, jego składnia jest z założenia
    "pasożytnicza" na składni goszczącego języka.

    Różne implementacje języków *Kanren można znaleźć tutaj:
    http://minikanren.org/

    Jak byś sobie chciał zobaczyć jak to wygląda np. w JavaScripcie, to tutaj masz
    przykłady:
    https://github.com/tca/veneer/blob/master/mk_test.js


  • 28. Data: 2019-08-06 16:57:16
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 06.08.2019 o 16:39, g...@g...com pisze:
    > MiniKanren jako taki nie ma swojej składni, jego składnia jest z założenia
    "pasożytnicza" na składni goszczącego języka.
    >
    > Różne implementacje języków *Kanren można znaleźć tutaj:
    > http://minikanren.org/

    To świetnie, widzę że nawet język nie musi być funkcyjny. Widzę Javę i
    Rust (co prawda nie ma C++, ale to chyba z braku odśmiecania pamięci)
    Najbardziej znam Javę, więc w wolnym czasie przyjrzę się:
    https://github.com/nd/mk.java
    i
    https://github.com/heidisu/java8kanren


  • 29. Data: 2019-08-06 17:01:42
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 06.08.2019 o 16:39, g...@g...com pisze:
    > Jak byś sobie chciał zobaczyć jak to wygląda np. w JavaScripcie, to tutaj masz
    przykłady:
    > https://github.com/tca/veneer/blob/master/mk_test.js
    >

    A tu widzę w przeglądarce
    http://tca.github.io/veneer/examples/editor.html
    ale składnia wydaje mi się że przypomina kanren w schemie a nie JavaScript


  • 30. Data: 2019-08-06 17:20:14
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu wtorek, 6 sierpnia 2019 16:57:18 UTC+2 użytkownik Borneq napisał:

    > > MiniKanren jako taki nie ma swojej składni, jego składnia jest z założenia
    "pasożytnicza" na składni goszczącego języka.
    > >
    > > Różne implementacje języków *Kanren można znaleźć tutaj:
    > > http://minikanren.org/
    >
    > To świetnie, widzę że nawet język nie musi być funkcyjny. Widzę Javę i
    > Rust (co prawda nie ma C++, ale to chyba z braku odśmiecania pamięci)

    W Rust też chyba nie ma odśmiecania pamięci.
    Podejrzewam, że odkąd w C++ są lambdy, powinno się w nim bez problemu dać
    zaimplementować jakiegoś miniKanrena (a w najgorszym razie można po prostu alokować
    pamięć i jej nie zwracać)

strony : 1 . 2 . [ 3 ] . 4 . 5


Szukaj w grupach

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: