abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    17.4. 17:11 | Zajímavý článek

    Stanislav Fort, vedoucí vědecký pracovník z Vlčkovy 'kyberbezpečnostní' firmy AISLE, zkoumal dopady Anthropic Mythos (nový AI model od Anthropicu zaměřený na hledání chyb, který před nedávnem vyplašil celý svět) a předvedl, že schopnosti umělé inteligence nejsou lineárně závislé na velikosti nebo ceně modelu a dokázal, že i některé otevřené modely zvládly v řadě testů odhalit ve zdrojových kódech stejné chyby jako Mythos (například FreeBSD CVE-2026-4747) a to s výrazně nižšími provozními náklady.

    MakeIranBombedAgain❗ | Komentářů: 7
    17.4. 12:44 | IT novinky

    Federální návrh zákona H.R.8250 'Parents Decide Act', 13. dubna předložený demokratem Joshem Gottheimerem a podpořený republikánkou Elise Stefanik coby spolupředkladatelkou (cosponsor), by v případě svého schválení nařizoval všem výrobcům operačních systémů při nastavování zařízení ověřovat věk uživatelů a při používání poskytovat tento věkový údaj aplikacím třetích stran. Hlavní rozdíl oproti kalifornskému zákonu AB 1043 a kolorádskému SB26-051 je ten, že federální návrh by platil rovnou pro celé USA.

    MakeIranBombedAgain❗ | Komentářů: 12
    17.4. 12:33 | Nová verze

    Qwen (čínská firma Alibaba Cloud) představila novou verzi svého modelu, Qwen3.6‑35B‑A3B. Jedná se o multimodální MoE model s 35 miliardami parametrů (3B aktivních), nativní kontextovou délkou až 262 144 tokenů, 'silným multimodálním vnímáním a schopností uvažování' a 'výjimečnou schopností agentického kódování, která se může měřit s mnohem rozsáhlejšími modely'. Model a dokumentace jsou volně dostupné na Hugging Face, případně na čínském Modelscope. Návod na spuštění je už i na Unsloth.

    MakeIranBombedAgain❗ | Komentářů: 1
    17.4. 11:00 | Nová verze

    Sniffnet, tj. multiplatformní (Windows, macOS a Linux) open source grafická aplikace pro sledování internetového provozu, byl vydán ve verzi 1.5. V přehledu novinek je vypíchnuta identifikace aplikací komunikujících po síti.

    Ladislav Hagara | Komentářů: 4
    17.4. 02:22 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 15.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 1
    17.4. 01:11 | Pozvánky

    Současně se SUSECON 2026 proběhne příští čtvrtek v Praze také komunitní Open Developer Summit (ODS) zaměřený na open source a openSUSE. Akce se koná ve čtvrtek 23. 4. (poslední den SUSECONu) v Hilton Prague (místnost Berlin 3) a je zcela zdarma, bez nutnosti registrace na SUSECON. Na programu jsou témata jako automatizace (AutoYaST), DevOps, AI v terminálu, bezpečnost, RISC-V nebo image-based systémy. Všichni jste srdečně zváni.

    lkocman | Komentářů: 1
    16.4. 15:44 | Humor

    Český úřad zeměměřický a katastrální zavedl u anonymního nahlížení do katastru nemovitostí novou CAPTCHA ve formě mapové puzzle: nepřihlášení uživatelé musí nově správně otočit devět dlaždic v 3x3 poli tak, aby dohromady daly souvislý obrázek výseče reálné mapy, přičemž na to mají pouze jeden časově omezený pokus. Test je podle uživatelů i odborníků příliš obtížný a na sociálních sítích pochopitelně schytává zaslouženou kritiku a

    … více »
    MakeIranBombedAgain❗ | Komentářů: 36
    16.4. 15:33 | Nová verze

    Byla vydána verze 1.95.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    16.4. 15:22 | Zajímavý software

    Mozilla prostřednictvím své dceřiné společnosti MZLA Technologies Corporation představila open-source AI klienta Thunderbolt. Primárně je určený pro firemní nasazení.

    Ladislav Hagara | Komentářů: 0
    16.4. 14:00 | IT novinky

    Firma Cal.com oznámila, že přesouvá svůj produkční kód z otevřeného do uzavřeného repozitáře z důvodu bezpečnostního rizika umělé inteligence, která prý dokáže vyhledávat a zneužívat zranitelnosti rychleji, než by je jejich vývojářský tým stíhal opravovat. Zároveň zveřejnila samostatnou, open-source verzi Cal.diy pod licencí MIT, ovšem bez řady původních funkcí. O tom, zda je toto opatření rozumné, existují pochyby. … více »

    MakeIranBombedAgain❗ | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (2%)
     (15%)
     (25%)
    Celkem 1356 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Výrazy a procedury ve Scheme

    15. 2. 2008 | David Kolibáč | Programování | 4042×

    V tomto článku si ukážeme, jak používat interpreta jazyka Scheme jako kalkulátor, a posléze se postupným zobecňováním dostaneme k procedurám.

    Seznamy

    Na úvod trošku teorie.

    (* 12 3 5)

    Uvedený výraz v závorkách je příkladem seznamu, platí pro něj následující:

    • Seznam je skupina konstant/výrazů/proměnných oddělených mezerami a uzavřených v závorkách.
    • První prvek seznamu je tzv. hlava seznamu.
    • Všechny prvky seznamu, které nejsou jeho hlavou, nazýváme ocas seznamu.
    • Seznamy lze samozřejmě vnořovat, pak se vyhodnocují od toho nejhlouběji vnořeného.

    Výrazy

    Obecný tvar výrazu vypadá takto:

    (operátor hodnota1 hodnota2 ... hodnotaN)

    Základní matematické operátory naleznete v tabulce:

    +sčítání
    -odčítání
    *násobení
    /dělení

    Hodnotou může být jiný výraz nebo číselná konstanta, následující seznam obsahuje jejich příklady:

    (1 3/2 3.14 2.66e25 -3 1+3i)

    Je vidět, že Scheme zvládá nejen celá a racionální čísla, ale i čísla komplexní a zlomky.

    Nyní na ukázku vyjádříme nějaký matematický výpočet pomocí syntaxe Scheme:

    (11 - 3 + 4 - 2) * 3 / (15 + 3 + 2) * (5 * 6/7)
    (/ (* (- (+ 11 4) 3 2) 3) (* (+ 15 3 2) (* 5 6/7)))
    ; výsledek je 7/20

    Pretty printing

    Poslední uvedený příklad vám možná přišel poněkud nepřehledný. Naštěstí nám Scheme poskytuje dostatek volnosti při formátování zdrojového kódu. Výraz pak může vypadat třeba takto:

    (/ (* (- (+ 11 4) 3 2)
          3)
       (* (+ 15 3 2)
          (* 5 6/7)))

    Mírně zobecňujeme

    Představte si, že potřebujete napsat ve Scheme nějaký složitý výraz, v němž se často vyskytuje nějaká konstanta. Kdybyste psali na její místo stále patřičnou hodnotu, bylo by možné, že

    1. se později ztratíte ve výrazu,
    2. se někde přepíšete,
    3. při pozdější úpravě hodnoty na nějaký výskyt zapomenete.

    Naštěstí existuje konstrukce let, která uvedený problém řeši. Má tvar:

    (let ((jméno1 hodnota1)
          (jméno2 hodnota2)
           ...
           jménoN hodnotaN))
       (výraz))

    K tématu si ukážeme jednoduchý příklad nezakládající se na realitě (neodvozoval jsem si jej, prachsprostě jsem si jej vymyslel):

    (let ((pi 3.14) (x (+ -5/7 0.3e-3)))
       (/ (* (+ pi x)
             (- pi x))
          2))
    ; výsledek je cca 4.675

    Chceme-li proměnnou využívat i mimo výraz v konstrukci let, definujeme novou proměnnou:

    (define jméno hodnota)

    Například tedy:

    (define pi 3.14)
    (define r 5)
    (* 2 pi r)
    ; obvod kruhu je 31.4

    Zobecňujeme

    Kostrukce let nám mnohdy pomůže, ale jsou situace, kdy je úroveň abstrakce, kterou poskytuje, příliš nízká, protože umožňuje pouze nahrazení konkrétními čísly. Pokud chceme nahrazovat obecným vzorcem, použijeme konstrukci lambda:

    ((lambda (jméno) (vzorec))
       (výraz))

    Ještě si ukážeme jednoduchý příklad:

    ((lambda (x) (+ x x))
       (* 2 8))
    ; výsledek je 32

    Procedury

    Konstrukce let a lambda jsou velmi užitečné na úrovni výrazů, jenže nám nepomohou, pohybujeme-li se na úrovni celého programu. Pak nastupují na řadu procedury. Zkráceně se zapisují:

    (define (jméno argumenty)
       (tělo_funkce))

    Argumenty jsou vstupní hodnoty s nimiž procedura pracuje.

    (define (mocnina x) (* x x))
    (* 3.14 (mocnina 5))
    ; obsah kruhu o poloměru 5 je 78.5

    Zápis programu do souboru

    Pokud píšeme nějaký program a chceme jej do budoucna uchovat, musíme jej zapsat do souboru (nejlépe s příponou .scm). Z interaktivního interpreta jej načteme konstrukcí load:

    (load "cesta_k_souboru")

    Malá ukázka:

    david@schematic:~$ cat > priklad.scm
    (define (mocnina x) (* x x))
    (mocnina 12)
    
    david@schematic:~$ mzscheme
    Welcome to MzScheme version 360, Copyright (c) 2004-2006 PLT Scheme Inc.
    > (load "priklad.scm")
    144
    >

    Příště

    Příště se budeme věnovat podmínkám a rekurzi -- Scheme právě jí nahrazuje cykly.

    Přidávám několik odkazů na jiné zdroje. Jedná se o knihy (v angličtině) dostupné on-line:

           

    Hodnocení: 50 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    15.2.2008 00:34 wumpus | skóre: 2
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    IMHO česky má seznam hlavu a tělo.
    15.2.2008 08:42 Xerces
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Taky už jsem slyšel používat termín ocas, ale příjde mi to moc sexistický. Ocas maj jenom správní chlapy.
    Milan Vít avatar 15.2.2008 15:15 Milan Vít | skóre: 23 | blog: about:linux | Orlová
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Tak správní, že se musí psát s tvrdým? :-)
    „There is no dark side of the Moon really… as a matter of fact it's all dark.“
    15.2.2008 18:04 Xerces
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Přesně tak, pro ně totiž neplatí, že .... Ženy si hrály s tvrdým a chlapi šli domů z měkkým. Správní chlapy i domů chodí s tvrdým :-)
    15.2.2008 18:04 Xerces
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    domů z <=> domů s
    15.2.2008 00:55 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    "Kostrukce let nám mnohdy pomůže, ale jsou situace, kdy je úroveň abstrakce, kterou poskytuje, příliš nízká, protože umožňuje pouze nahrazení konkrétními čísly. Pokud chceme nahrazovat obecným vzorcem, použijeme konstrukci lambda"
    Přiznám se, že téhle pasáži moc nerozumím. Let není nic jiného než převlečená lambda. :-)
    ((lambda (jméno) (vzorec))
       (výraz))
    je přesně totéž, co
    (let ((jméno výraz))
       (vzorec))
    Možná by bylo lépe zřejmé, co máš na mysli tou "nízkou úrovní abstrakce", kdybys lépe vysvětlil to "nahrazení konkrétními čísly". ;-)
    Konstrukce let a lambda jsou velmi užitečné na úrovni výrazů, jenže nám nepomohou, pohybujeme-li se na úrovni celého programu. Pak nastupují na řadu procedury.
    Tomu taky nerozumím. :-) To, co vytváří lambda, se také nazývá procedura. Tzv. top-level define forma
    (define (jméno argumenty)
       (tělo_funkce))
    obdobně prostou transformací vede na
    (define jméno 
        (lambda (argumenty)
            (tělo_funkce)))
    Tohle dokonce člověk najde přímo v R5RS.
    Seznamy lze samozřejmě vnořovat, pak se vyhodnocují od toho nejhlouběji vnořeného.
    Tohle taky nedává smysl. Seznamy se přeci nevyhodnocují. Nepleteš si to s formami? A nezmizely Ti někam odkazy na konci článku? :-) Růžový čumáček drží palce do dalšího schemování a doporučuje přečíst si Lambda Papery, RnRS a SICP, aby nedošlo k nedorozumění studenta s jazykem. :-)
    15.2.2008 01:39 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Seznamy lze samozřejmě vnořovat, pak se vyhodnocují od toho nejhlouběji vnořeného.
    co naplat, ony vyhodnocovat pri trose dobre vule jdou (eval (list '+ 1 2 3)), ale je to spis problem vadnosti celeho popisu a terminologie ;-] (btw. termin forma je lispovsky, r5rs tento termin nepouziva a pouziva misto toho jina zverstva, ale to je na uplne jinou diskuzi ;-])

    pokud predpokladame vyhodnocovani z leva doprava (r5rs to nepredpoklada) pak v (+ (+ 1 2) (+ (+ 1 2) (+ 3 4))) vyraz (+ 3 4) bude vyhodnoceny jako jeden z poslednich.

    cely ten clanek je takovy... jak bych to rekl... napsat clanek vyhodnocovani programu ve schemu, kde se termin symbol nebo s-vyraz nevyskytuje ani jednou a kdy termin ,,vyhodnocuje'' se vyskytuje prave jednou... je docela kumst.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    15.2.2008 07:26 nigol
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Souhlas. Jenom bych jeste doplnil, ze specialni forma define je trosku neco jineho, nez prirazeni hodnoty v klasickem smyslu, jak jsme u programovacim jazyku zvykli. Vytvari se tim nove prostredi, ve kterem se navaze na urcity symbol vyhodnoceni vyrazu. No a to ma zajimave dusledky, protoze s prostredim se daji delat psi kusy a s nim uzce souvisi i continuations, s kterymi se daji delat dalsi psi kusy (treba celkem jednoducha implementace multitaskingu) a doufam, ze se o techto tematech v nejakem budoucim pokracovani docteme.
    15.2.2008 15:56 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    define zadne prostredi nevytvari. define navaze v aktualnim prostredi hodnotu na symbol. nic vic nic min. ke vzniku prostredi dochazi v momente ,,zavolani uzivatelske funkce''.
    (define foo (lambda (x) (* x x)) ; zadne prostredi nevzniklo, jen na symbol,
                                          ; foo je navazana funkce, ktera v sobe drzi
                                          ; (ukazatel na) rodicovske prostredi
    (foo 1) ; vzniklo nove prostredi, kde na hodnotu x je navazana jednicka
            ; a v tomto prostredi se vyhodnoti (* x x)
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    18.2.2008 06:55 nigol
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Dik za upresneni.
    15.2.2008 07:41 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    A nezmizely Ti někam odkazy na konci článku?
    Viz "Odkazy a zdroje".
    15.2.2008 10:26 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    > Seznamy se přeci nevyhodnocují.

    Ale vyhodnocuji - podivej se na to s pohledu REPL, uzivatel zada (+ 1 2). Read to nacte jako seznam delky 3, obsahujici symbol a dve cisla. Pak prijde eval a tento seznam vyhodnoti.
    15.2.2008 10:38 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Výrazy a procedury ve Scheme
    Konstrukce let a lambda jsou velmi užitečné na úrovni výrazů, jenže nám nepomohou, pohybujeme-li se na úrovni celého programu. Pak nastupují na řadu procedury.
    Tomu taky nerozumím. :-) To, co vytváří lambda, se také nazývá procedura. Tzv. top-level define forma
    Nehlede na to, ze konstrukce let a lambda je mozne pouzit i na top-level urovni a define i v 'zanorene' urovni (s drobnou odchylkou v semantice oproti top-level define).

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.