eGospodarka.pl
eGospodarka.pl poleca

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

  • 1. Data: 2019-07-30 15:58:03
    Temat: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    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


  • 2. Data: 2019-07-31 11:34:46
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: dantes <d...@q...com>

    Dnia Tue, 30 Jul 2019 06:58:03 -0700 (PDT), g...@g...com
    napisał(a):

    > 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

    Najbrdziej imponujący kod (w pierwszej 10-ce):
    emulator karty sim w asemblerze sprzed ery Comp128v1.



  • 3. Data: 2019-07-31 12:32:24
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Roman Tyczka <n...@b...no>

    On Wed, 31 Jul 2019 11:34:46 +0200, dantes wrote:

    > Dnia Tue, 30 Jul 2019 06:58:03 -0700 (PDT), g...@g...com
    > napisał(a):
    >
    >> 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
    >
    > Najbrdziej imponujący kod (w pierwszej 10-ce):
    > emulator karty sim w asemblerze sprzed ery Comp128v1.

    To jeśli chodzi o assembler to w latach dziewięćdziesiątych powstał program
    muzyczny typu tracker o nazwie DigiBooster. Był to najbardziej zaawansowany
    tracker na Amigę, a było ich wtedy wiele. Napisany przez dwóch braci z
    Wrocławia. Kawał dobrego softu, np. Amiga hardwarowo miała 4 kanały
    dżwiękowe, a DigiBooster pozwalał pracować na 128 kanałach, co było
    ewenementem w tego typu sofcie.

    Obecnie odkupiony i przepisany już na C.

    http://www.digibooster.de/en/gallery.php


    ps. fajne było to, że zgłaszałem chłopakom od DigiBoostera błędy i sugestie
    co do rozwoju nowych wersji ...Pocztą Polską, to może być niewyobrażalne
    dzisiaj :-)

    --
    pozdrawiam
    Roman Tyczka


  • 4. Data: 2019-07-31 13:54:34
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 31.07.2019 o 12:32, Roman Tyczka pisze:
    > To jeśli chodzi o assembler to w latach dziewięćdziesiątych powstał program
    > muzyczny typu tracker o nazwie DigiBooster. Był to najbardziej zaawansowany
    > tracker na Amigę, a było ich wtedy wiele. Napisany przez dwóch braci z
    > Wrocławia. Kawał dobrego softu, np. Amiga hardwarowo miała 4 kanały
    > dżwiękowe, a DigiBooster pozwalał pracować na 128 kanałach, co było
    > ewenementem w tego typu sofcie.
    >
    > Obecnie odkupiony i przepisany już na C.
    >
    > http://www.digibooster.de/en/gallery.php


    Stare dzieje, gdy marzeniem był ZxSpectrum z interpreterem Basicem, i w
    Bajtku był opisany ToBoS (https://pl.wikipedia.org/wiki/ToBoS-FP)
    kompilator Basica do kodu maszynowego.
    Duże wrażenie przykład wzoru na sinusa, gdzie zastosowano wielomiany
    Czebyszewa, podczas gdy w Basicu był wyliczany ogólną metodą - szeregiem
    z silniami,


  • 5. Data: 2019-07-31 14:59:27
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > 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ł.

    Przeczytałem. Najpierw formalności - nie spodobały mi się dwie uwagi już na samym
    początku tekstu:

    "Don't be surprised if understanding this answer would take you many days, weeks or
    even months."

    Nikt nie będzie zaskoczony, bo jeśli ktoś miałby tego nie zrozumieć, to by po prostu
    nie doczytał. Czytanie długich tekstów jest niemodne, zwłaszcza takich, których się
    nie rozumie od razu. Trochę też wygląda to na założenie, że czytelnik nie kuma bazy -
    otóż samo pytanie do tego artykułu było skierowane do programistów (nie można być pod
    wrażeniem jakiegokolwiek kodu, nie rozumiejąc go), więc zakładanie, że ktoś będzie
    potrzebował miesięcy, żeby zrozumieć Twój wywód, jest aroganckie. Zwłaszcza ta część,
    że ktoś w ogóle poświęci miesiące swojego życia na tak zaszczytne zadanie jak próba
    zrozumienia akurat Twojego wywodu, z 40+ innych w tej samej dyskusji, spośród
    niezliczonej liczby takich dyskusji na niezliczonej liczbie portali dyskusyjnych.
    Realia publikowania na portalach społecznościowych są takie, że albo ktoś to od razu
    zrozumie, albo od razu oleje. Nikt nie będzie inwestował cennych miesięcy życia na
    zrozumienie akurat Twojego artykułu. Bez jaj.

    "Frankly speaking, I've found most other answers here completely disappointing."

    W takim razie, frankly speaking, sam się podsumowałeś tym wstępem.
    I nie tylko dlatego, że dla wielu ludzi najbardziej imponujące są właśnie najprostsze
    olśnienia, takie programistyczne Zen, jak wcześniejszy artykuł z wieżami Hanoi w 3
    linijkach. Poprzednim zdaniem postawiłeś się ponad swoimi czytelnikami a tym zdaniem
    postawiłeś się ponad autorami innych postów. I takie właśnie są dwa zdania z trzech z
    pierwszego paragrafu Twojego tekstu. Bez jaj. Nie zachęcasz w ten sposób do rzeczowej
    dyskusji.


    A teraz konkretnie - technika faktycznie ciekawa, ale pomijając zupełnie podstawowy
    wykład z LISPa dałoby się to zmieścić w kilku procentach objętości.
    Czy to ma realne zastosowania? Nie wiem. Może mieć - obecnie żywe są dyskusje na
    temat zastępowania różnych grup zawodowych przez AI i dla nas ciekawym pytaniem jest
    to, czy można zastąpić programistę. Ale chyba trend jest w kierunku innych technik.
    Ostatnio widziałem prezentację systemu asystenta programisty (w skrócie: podpowiadacz
    w edytorze, czyli tak jak w Twoim artykule), który działał na zasadzie deep learning
    z milionów plików źródłowych z GitHuba. Czyli "nauczył się" (cokolwiek to znaczy)
    czytając istniejący już kod a potem podpowiada programiście całe garście kodu do tego
    co chce zrobić. I mam wrażenie, że ML jest bardziej prawdopodobnym kierunkiem rozwoju
    dla takich systemów. Zaletą takiego podejścia jest to, że ML działa jednakowo dobrze
    na każdym języku programowania (w szczególności na tych najpopularniejszych),
    natomiast to co pokazałeś w swoim artykule działa tylko w LISPie.

    Sam artykuł oczywiście, jak zwykle, zniechęca do LISPa. Jak ktoś już lubi ten język,
    to się będzie cieszył, ale też dla takiej publiczności nie było sensu takich podstaw
    wykładać. A jak ktoś nie lubi, to nie polubi. Ile można wciskać ludziom, że
    zagnieżdżone pary to dobra metoda na robienie list? Przecież to absurd.
    W tym kontekście konsekwentnie bardziej podoba mi się podejście Wolframa, gdzie lista
    jest podstawową konstrukcją wspieraną przez język:

    head[elem1, elem2, elem3, ...]

    bez sztucznego (!) ograniczenia na liczbę elementów. Nie ma zagnieżdżeń, jeśli nie są
    potrzebne (ale mogą być, jeśli chcemy drzewa). W Wolframie fajny jest też pomysł na
    wbudowany symbol Nothing, który "znika" z sekwencji elementów, jeśli się gdzieś
    pojawi. Wtedy funkcję filtrującą "only" można zdefiniować tak:

    only[condition_, list_] := Map[
    Function[x,
    If[condition[x], x, Nothing]
    ],
    list
    ]

    czyli mapujemy elementy na siebie albo na Nothing jeśli nie spełniają warunku, i
    wtedy, przykładowo:

    only[EvenQ, {1, 2, 3, 4, 5, 6, 7}]

    {2, 4, 6}

    Oczywiście nikt by tak nie zrobił, bo są gotowe funkcje filtrujące, ale ten przykład
    pokazuje, że o listach można myśleć prosto. I wtedy poprzeczka przetwarzania struktur
    danych jest konsekwentnie niżej - więc zapewne Twoje przykłady z artykułu dałoby się
    zapisać dużo prościej, zamiast walczyć ze sztucznymi ograniczeniami języka.
    Zagnieżdżone pary? No daj spokój. Palce można połamać, zupełnie bez satysfakcji.

    Inna rzecz - czy konstrukcja if musi być podstawową w LISPie? W Wolframie nie musi
    być, bo podstawą całego przetwarzania i tak jest pattern matching, czyli mogę sobie
    zdefiniować własnego ifa:

    myIf[True, x_, y_] := x
    myIf[False, x_, y_] := y

    Chociaż to nie jest właściwe technicznie określenie, można to rozumieć jako
    przeciążanie funkcji na wartości pierwszego parametru.
    To działa tak samo jak standardowy If, więc ten standardowy If nie musi być
    "magiczną" funkcją, tylko może być biblioteczną. I konsekwentnie można sobie tak
    zdefiniować inne warunkowe konstrukcje sterujące. LISP też tak umie, czy może musi
    mieć ifa jako "magiczną" funkcję interpretera, bez której niczego nie dało by się
    zrobić?

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


  • 6. Data: 2019-07-31 16:18:18
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    > prezentację systemu asystenta programisty (w skrócie: podpowiadacz w
    > edytorze, czyli tak jak w Twoim artykule), który działał na zasadzie
    > deep learning z milionów plików źródłowych z GitHuba. Czyli "nauczył
    > się" (cokolwiek to znaczy) czytając istniejący Już kod a potem
    > podpowiada programiście całe garście kodu do tego co chce zrobić.
    > I mam wrażenie, że ML jest bardziej prawdopodobnym kierunkiem rozwoju
    > dla takich systemów. Zaletą takiego podejścia jest to, że ML działa
    > jednakowo dobrze na każdym języku programowania (w szczególności na
    > tych najpopularniejszych), natomiast to co pokazałeś w swoim artykule
    > działa tylko w LISPie.

    Jakieś namiary ?


  • 7. Data: 2019-07-31 16:36:27
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Borneq <b...@a...hidden.p>

    W dniu 31.07.2019 o 16:18, Borneq pisze:
    > > prezentację systemu asystenta programisty (w skrócie: podpowiadacz w
    > > edytorze, czyli tak jak w Twoim artykule), który działał na zasadzie
    > > deep learning z milionów plików źródłowych z GitHuba. Czyli "nauczył
    > > się" (cokolwiek to znaczy) czytając istniejący Już kod a potem
    > > podpowiada programiście całe garście kodu do tego co chce zrobić.
    > > I mam wrażenie, że ML jest bardziej prawdopodobnym kierunkiem rozwoju
    > > dla takich systemów. Zaletą takiego podejścia jest to, że ML działa
    > > jednakowo dobrze na każdym języku programowania (w szczególności na
    > > tych najpopularniejszych), natomiast to co pokazałeś w swoim artykule
    > > działa tylko w LISPie.
    >
    > Jakieś namiary ?

    Widzę tu dwie możliwości: jedna to podpowiadanie kodem, drugie to
    potężna refaktoryzacja typu "wydziel x kodu jakąś klasę, odpowiednio
    poprzenoś metody , zalezności mają być takie by się kompilowało"


  • 8. Data: 2019-07-31 19:03:38
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: g...@g...com

    W dniu środa, 31 lipca 2019 14:59:28 UTC+2 użytkownik Maciej Sobczak napisał:
    > > 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ł.
    >
    > Przeczytałem. Najpierw formalności - nie spodobały mi się dwie uwagi już na samym
    początku tekstu:
    >
    > "Don't be surprised if understanding this answer would take you many days, weeks or
    even months."
    >
    > Nikt nie będzie zaskoczony, bo jeśli ktoś miałby tego nie zrozumieć, to by po
    prostu nie doczytał.

    Podejrzewam, że większość osób może być zaskoczona, ponieważ taki format odpowiedzi
    raczej rzadko zdarza się na Quorze.

    > Czytanie długich tekstów jest niemodne, zwłaszcza takich, których się nie rozumie
    od razu. Trochę też wygląda to na założenie, że czytelnik nie kuma bazy - otóż samo
    pytanie do tego artykułu było skierowane do programistów (nie można być pod wrażeniem
    jakiegokolwiek kodu, nie rozumiejąc go), więc zakładanie, że ktoś będzie potrzebował
    miesięcy, żeby zrozumieć Twój wywód, jest aroganckie.

    Aroganckie? Mnie napisanie tego tekstu zajęło kilka miesięcy, a zrozumienie
    podstawowych rzeczy - co najmniej kilka lat. Daniel Friedman stwierdził kiedyś, że
    zrozumienie opisanego przeze mnie silnika wnioskującego - kilkunastu linijek kodu -
    zajęło mu ponad rok.

    > Zwłaszcza ta część, że ktoś w ogóle poświęci miesiące swojego życia na tak
    zaszczytne zadanie jak próba zrozumienia akurat Twojego wywodu, z 40+ innych w tej
    samej dyskusji, spośród niezliczonej liczby takich dyskusji na niezliczonej liczbie
    portali dyskusyjnych. Realia publikowania na portalach społecznościowych są takie, że
    albo ktoś to od razu zrozumie, albo od razu oleje. Nikt nie będzie inwestował cennych
    miesięcy życia na zrozumienie akurat Twojego artykułu. Bez jaj.

    Tego nie mogę wiedzieć (i sądzę, że Ty też nie).
    Ale dotychczasowe reakcje na artykuł były raczej przychylne, i wydają się sugerować,
    że określenie "nikt" to raczej spore niedoszacowanie.

    > "Frankly speaking, I've found most other answers here completely disappointing."
    >
    > W takim razie, frankly speaking, sam się podsumowałeś tym wstępem.
    > I nie tylko dlatego, że dla wielu ludzi najbardziej imponujące są właśnie
    najprostsze olśnienia, takie programistyczne Zen, jak wcześniejszy artykuł z wieżami
    Hanoi w 3 linijkach. Poprzednim zdaniem postawiłeś się ponad swoimi czytelnikami a
    tym zdaniem postawiłeś się ponad autorami innych postów.

    Nie rozumiem, w jaki sposób "postawiłem się ponad swoimi czytelnikami".
    Stwierdzając, że zrozumienie czegoś może zająć kilka miesięcy?
    Pomijając kwestię, że owo "postawienie się ponad nimi" jest logicznie niewykonalne,
    bo nie mogę a priori powiedzieć, kto ten tekst przeczyta.

    Zaś co do "stawiania się ponad autorami innych postów", to owszem, ja sam nie
    wyniosłem z ich lektury nic wartościowego. To mnie stawia w tym samym szeregu z
    ewentualnymi innymi czytelnikami, którzy mieli podobne odczucia.

    > A teraz konkretnie - technika faktycznie ciekawa, ale pomijając zupełnie podstawowy
    wykład z LISPa dałoby się to zmieścić w kilku procentach objętości.

    Chciałbym to zobaczyć.

    > Czy to ma realne zastosowania? Nie wiem. Może mieć - obecnie żywe są dyskusje na
    temat zastępowania różnych grup zawodowych przez AI i dla nas ciekawym pytaniem jest
    to, czy można zastąpić programistę. Ale chyba trend jest w kierunku innych technik.
    Ostatnio widziałem prezentację systemu asystenta programisty (w skrócie: podpowiadacz
    w edytorze, czyli tak jak w Twoim artykule), który działał na zasadzie deep learning
    z milionów plików źródłowych z GitHuba. Czyli "nauczył się" (cokolwiek to znaczy)
    czytając istniejący już kod a potem podpowiada programiście całe garście kodu do tego
    co chce zrobić. I mam wrażenie, że ML jest bardziej prawdopodobnym kierunkiem rozwoju
    dla takich systemów.

    No właśnie, wydaje mi się, że w owym dopowiedzeniu "cokolwiek to znaczy" jest
    pogrzebany pies.
    Nie traktuję programowania jako "produkowania kodu", tylko jako precyzyjną formę
    wyrażania myśli. Żadne AI nie będzie raczej w stanie wyrazić moich myśli
    precyzyjniej, niż ja sam.

    > Zaletą takiego podejścia jest to, że ML działa jednakowo dobrze na każdym języku
    programowania (w szczególności na tych najpopularniejszych), natomiast to co
    pokazałeś w swoim artykule działa tylko w LISPie.

    To co pokazałem w swoim artykule to po prostu idea, którą najwygodniej wyrazić w
    Lispie. Kilka lat temu Will Byrd przyjechał do Poznania, gdzie na konferencji
    PolyConf pokazał tę technikę zaimplementowaną dla prostego języka imperatywnego:

    https://www.youtube.com/watch?v=eQL48qYDwp4

    > Sam artykuł oczywiście, jak zwykle, zniechęca do LISPa.

    Powiedz coś więcej na ten temat. W jaki sposób zniechęca?

    > Jak ktoś już lubi ten język, to się będzie cieszył, ale też dla takiej publiczności
    nie było sensu takich podstaw wykładać. A jak ktoś nie lubi, to nie polubi. Ile można
    wciskać ludziom, że zagnieżdżone pary to dobra metoda na robienie list? Przecież to
    absurd.
    > W tym kontekście konsekwentnie bardziej podoba mi się podejście Wolframa, gdzie
    lista jest podstawową konstrukcją wspieraną przez język:
    >
    > head[elem1, elem2, elem3, ...]
    >
    > bez sztucznego (!) ograniczenia na liczbę elementów. Nie ma zagnieżdżeń, jeśli nie
    są potrzebne (ale mogą być, jeśli chcemy drzewa).

    Nie rozumiem. Jakiego ograniczenia na liczbę elementów?

    > W Wolframie fajny jest też pomysł na wbudowany symbol Nothing, który "znika" z
    sekwencji elementów, jeśli się gdzieś pojawi. Wtedy funkcję filtrującą "only" można
    zdefiniować tak:
    >
    > only[condition_, list_] := Map[
    > Function[x,
    > If[condition[x], x, Nothing]
    > ],
    > list
    > ]
    >
    > czyli mapujemy elementy na siebie albo na Nothing jeśli nie spełniają warunku, i
    wtedy, przykładowo:
    >
    > only[EvenQ, {1, 2, 3, 4, 5, 6, 7}]
    >
    > {2, 4, 6}

    A co jeśli owa wartość Nothing miałaby zostać przekazana jako argument do funkcji?

    > Oczywiście nikt by tak nie zrobił, bo są gotowe funkcje filtrujące, ale ten
    przykład pokazuje, że o listach można myśleć prosto.

    No bo o listach można myśleć prosto?

    > I wtedy poprzeczka przetwarzania struktur danych jest konsekwentnie niżej - więc
    zapewne Twoje przykłady z artykułu dałoby się zapisać dużo prościej, zamiast walczyć
    ze sztucznymi ograniczeniami języka. Zagnieżdżone pary? No daj spokój. Palce można
    połamać, zupełnie bez satysfakcji.

    W kilku miejscach - tam, gdzie poziom zagnieżdżeń przesłaniał istotę rzeczy - użyłem
    notacji Haskella.

    >
    > Inna rzecz - czy konstrukcja if musi być podstawową w LISPie? W Wolframie nie musi
    być, bo podstawą całego przetwarzania i tak jest pattern matching, czyli mogę sobie
    zdefiniować własnego ifa:
    >
    > myIf[True, x_, y_] := x
    > myIf[False, x_, y_] := y
    >
    > Chociaż to nie jest właściwe technicznie określenie, można to rozumieć jako
    przeciążanie funkcji na wartości pierwszego parametru.
    > To działa tak samo jak standardowy If, więc ten standardowy If nie musi być
    "magiczną" funkcją, tylko może być biblioteczną. I konsekwentnie można sobie tak
    zdefiniować inne warunkowe konstrukcje sterujące. LISP też tak umie, czy może musi
    mieć ifa jako "magiczną" funkcję interpretera, bez której niczego nie dało by się
    zrobić?

    To o co pytasz to absolutne podstawy lambda-rachunku.
    If jest definiowalny w oparciu o lambda-wyrażenia. Zamieściłem go jako część
    ekspozycji, ponieważ wydaje mi się łatwy do zrozumienia dla "nie-programistów".

    https://www.cl.cam.ac.uk/teaching/Lectures/funprog-j
    rh-1996/all.pdf
    rozdział 3

    Inna rzecz - czy pattern matching musi być podstawą w Wolframie? W LISPie nie musi
    być, i jeśli chcesz, możesz sobie zdefiniować swój własny.


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

    On Wednesday, July 31, 2019 at 4:18:18 PM UTC+2, Borneq wrote:
    > > prezentację systemu asystenta programisty (w skrócie: podpowiadacz w
    > > edytorze, czyli tak jak w Twoim artykule), który działał na zasadzie
    > > deep learning
    >
    > Jakieś namiary ?

    https://www.theverge.com/2019/7/24/20708542/coding-a
    utocompleter-deep-tabnine-ai-deep-learning-smart-com
    pose

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


  • 10. Data: 2019-08-01 14:26:25
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com>

    > > A teraz konkretnie - technika faktycznie ciekawa, ale pomijając zupełnie
    podstawowy wykład z LISPa dałoby się to zmieścić w kilku procentach objętości.
    >
    > Chciałbym to zobaczyć.

    Usuń z artykułu ten wykład o podstawach LISPa i zobacz, co zostało. Np. po co
    tłumaczyć ludziom, że operatory and i or można zaimplementować przy użyciu
    konstrukcji if? Generalnie - niepotrzebna dłużyzna.

    > Żadne AI nie będzie raczej w stanie wyrazić moich myśli precyzyjniej, niż ja sam.

    I znowu myślenie egocentryczne. Problem z AI nie polega na tym, że zrobi coś lepiej
    od nas, tylko że nasza robota nie będzie potrzebna i konsekwentnie nasze zdanie o
    naszej indywidualnej wyższości nad jakimś tam AI nikogo nie będzie interesować.
    Tzn. dzięki AI programowanie może zostać zepchnięte do roli hobby albo cepelii, tak
    jak np. ręcznie dziergane szaliki albo inna ceremika rekreacyjna.

    Natomiast co do prezycji myśli - bez przesady, akurat w tej dziedzinie nie
    błyszczymy. Niektórzy uważają, że właśnie brak precyzji pozwolił nam przetrwać i
    ewoluować ("we would never survive if we weren't a bit crazy"), ale akurat w
    dziedzinach formalnych to nas raczej ogranicza.

    > To co pokazałem w swoim artykule to po prostu idea, którą najwygodniej wyrazić w
    Lispie.

    Konsekwentnie się nie zgadzam, z racji tego, że w LISPie w ogóle mało co się wygodnie
    wyraża. Zagnieżdżone pary? Rekurencja? Daj spokój.

    > > Sam artykuł oczywiście, jak zwykle, zniechęca do LISPa.
    >
    > Powiedz coś więcej na ten temat. W jaki sposób zniechęca?

    Cytaty:

    "Aren't all those closing parentheses beautiful?"
    "The heavily parenthesized syntax of LISP may not be particularly readable."

    > Nie rozumiem. Jakiego ograniczenia na liczbę elementów?

    Wykład o LISPie zawsze kładzie nacisk na to, że albo mam jeden obiekt albo parę. I że
    jak chcę czegoś więcej, to jest to jakaś rzeźba z par. To nie jest ograniczenie? A
    potem się okazuje, że zmiana N-tego elementu wymaga rekurencji. Oczywiście, można to
    wszystko ukryć pod przystępnymi funkcjami bibliotecznymi, ale po co przykrywać
    problem, którego można po prostu nie mieć?

    > A co jeśli owa wartość Nothing miałaby zostać przekazana jako argument do funkcji?

    Na to też są sposoby, bo w takich specjalnych przypadkach można sterować dokładnym
    czasem ewaluacji. Niemniej, pytanie jest zasadne, ale zawsze można też odpowiedzieć,
    że można udawać, że takiego ficzeru w ogóle nie ma (tak jak go nie ma w innych
    językach), wtedy też nie powstaje problem z przekazywaniem Nothing jako parametr.

    > W kilku miejscach - tam, gdzie poziom zagnieżdżeń przesłaniał istotę rzeczy -
    użyłem notacji Haskella.

    Rozumiem. Czyli do programowania w LISPie potrzeby jest Haskell, żeby przekazać
    czytelnikowi o co chodzi w LISPowym kodzie.
    Właśnie takie efekty mam na myśli.

    > > Inna rzecz - czy konstrukcja if musi być podstawową w LISPie?

    > To o co pytasz to absolutne podstawy lambda-rachunku.
    >
    > https://www.cl.cam.ac.uk/teaching/Lectures/funprog-j
    rh-1996/all.pdf
    > rozdział 3

    OK, czyli nie musi.
    Ale żeby prawda i fałsz musiały wtedy być funkcjami? Daj spokój.

    > Inna rzecz - czy pattern matching musi być podstawą w Wolframie?

    Tak działa ewaluacja w Wolframie (to się nazywa "term rewriting":
    https://en.wikipedia.org/wiki/Rewriting). To podstawowy mechanizm, i tak dobrze udaje
    inne mechanizmy, że większość ludzi o nim zapomina, sądząc, że to jest po prostu
    "normalny wieloparadygmatowy język programowania".

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

strony : [ 1 ] . 2 ... 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: