Up: Návody na Scheme [Contents][Index]
Guix používa Guile implementáciu jazyka Scheme. Ak si chcete tento jazyk
vyskúšať, nainštalujte si Guile pomocou guix install guile
a spustite
REPL,
tzv.
slučku čítaj-vykonaj-zobraz, zadaním guile
v príkazovom
riadku.
Môžete tiež použiť príkaz guix shell guile -- guile
ak nechcete
inštalovať Guile do vášho používateľského profilu.
Riadky v nasledovných príkladoch znázorňujú to, čo treba zadať v rámci REPL; riadky začínajúce na „⇒“ znázorňujú výsledok vykonania príkazu, zatiaľ čo riadky začínajúce na „-|“ znázorňujú to čo sa zobrazí na obrazovke. See Using Guile Interactively in GNU Guile Reference Manual, pre viac podrobností o REPL.
#true
a #false
(skrátene #t
a #f
)
znázorňujú logické hodnoty „pravda“ a „nepravda“.
Príklady platných výrazov:
"Ahoj svet!" ⇒ "Ahoj svet!" 17 ⇒ 17 (display (string-append "Ahoj " "Guix" "\n")) -| Ahoj Guix! ⇒ #<unspecified>
lambda
:
Vyššie uvedená funkcia vracia druhú mocninu hodnoty jej parametra. Keďže
všetko sa považuje za výraz, aj výraz lambda
vracia bezmennú funkciu,
ktorú je následne možné uplatniť na nejaký parameter:
((lambda (x) (* x x)) 3) ⇒ 9
Postupy sú pravidelné hodnoty, rovnako ako čísla, reťazce, logické veličiny a pod.
define
:
(define a 3) (define druha-mocnina (lambda (x) (* x x))) (druha-mocnina a) ⇒ 9
(define (druha-mocnina x) (* x x))
list
:
(list 2 a 5 7) ⇒ (2 3 5 7)
(srfi srfi-1)
ponúka obvyklé postupy na vytváranie a
spracovanie zoznamov (see list processing in GNU Guile
Reference Manual). Viď príklady použitia tých najužitočnejších:
(use-modules (srfi srfi-1)) ;načítať postupy na spracovanie zoznamov (append (list 1 2) (list 3 4)) ⇒ (1 2 3 4) (map (lambda (x) (* x x)) (list 1 2 3 4)) ⇒ (1 4 9 16) (delete 3 (list 1 2 3 4)) ⇒ (1 2 4) (filter odd? (list 1 2 3 4)) ⇒ (1 3) (remove even? (list 1 2 3 4)) ⇒ (1 3) (find number? (list "a" 42 "b")) ⇒ 42
Všimnite si, že prvým parametrom map
, filter
, remove
, a
find
je postup!
'(display (string-append "Ahoj " "Guix" "\n")) ⇒ (display (string-append "Ahoj " "Guix" "\n")) '(2 a 5 7) ⇒ (2 a 5 7)
quasiquote
(`
, obrátená jednoduchá úvodzovka) zabraňuje
vykonaniu výrazu v zátvorke dovtedy, kým nie je jeho vykonanie opätovne
povolené pomocou unquote (,
, čiarky). Týmto spôsobom dopodrobna
rozhodujeme o tom, čo sa vykoná a čo nie.
`(2 a 5 7 (2 ,a 5 ,(+ a 4))) ⇒ (2 a 5 7 (2 3 5 7))
Všimnite si, že hore uvedený výsledok je zoznam rôznorodých položiek: čísel,
znakov (a
) a posledná položka je tiež zoznam.
quasiquote
a unquote
, teda #~
(alebo gexp
) a
#$
(alebo ungexp
), ktoré umožňujú zaradiť kód na
neskoršie vykonanie.
S gvýrazmi sa stretnete, napríklad, v zadaniach niektorých balíkov, kde poskytujú kód, ktorý sa má vykonať až pri zostavovaní balíka. Vyzerajú takto:
(use-modules (guix gexp) ;aby sme mohli používať gvýrazy (gnu packages base)) ;kvôli „coreutils“ ;; Nasleduje G-výraz zaradzujúci kód na neskoršie vykonanie. #~(begin ;; Vykoná „ls“ z balíka určeného premennou ;; „coreutils“. (system* #$(file-append coreutils "/bin/ls") "-l") ;; Vytvoriť výstupný priečinok tohto balíka. (mkdir #$output))
Viď G-Expressions in GNU Guix Reference Manual, pre viac podrobností o gvýrazoch.
let
(see Local Bindings in GNU Guile Reference
Manual) môžeme zadať a pomenovať viacero miestnych premenných:
(define x 10) (let ((x 2) (y 3)) (list x y)) ⇒ (2 3) x ⇒ 10 y error→ In procedure module-lookup: Unbound variable: y
Ak chcete, aby bolo možné v neskorších zadaniach premenných odkazovať na
predtým zadané premenné, použite let*
.
#:
(mriežkou a dvojbodkou), po
ktorých nasledujú písmenové či číselné znaky:
#:takto
. See Keywords in GNU Guile Reference Manual.
%
je bežne používaný pre globálne premenné s prístupom
len na čítanie počas zostavovania. Všimnite si, že je to len všeobecným
zvykom, ako napr. _
v jazyku C. Scheme spracúva %
ako
hocijaký iný znak.
define-module
(see Creating Guile
Modules in GNU Guile Reference Manual). Napríklad
(define-module (guix build-system ruby)
#:use-module (guix store)
#:export (ruby-build
ruby-build-system))
určuje modul guix build-system ruby
, ktorý má byť umiestnený v
guix/build-system/ruby.scm niekde vo vyhľadávacej ceste Guilu. Závisí
na module (guix store)
a určuje dve premenné, ruby-build
a
ruby-build-system
.
Viď Package Modules in GNU Guix Reference Manual, pre viac podrobností o moduloch zadávajúcich balíky.
Dozvedieť sa viac: Scheme je jazyk, ktorý sa hojne využíva pri výuke programovania a sú na ňom založené mnohé podklady. V nasledovných dokumentoch sa môžete o Scheme dozvedieť viac:
- A Scheme Primer, od Christine Lemmer-Webberovej a Spritely Institute.
- Scheme at a Glance, od Steva Litta.
- Structure and Interpretation of Computer Programs, od Harolda Abelsona, Geralda Jay Sussmana a Julie Sussmanovej. Táto knižná príručka je bežne známa ako “SICP”.
Môžete si ju tiež stiahnuť a prečítať na vašom počítači:
guix install sicp info-reader info sicpĎalšie knihy, návody ako aj iné druhy zdrojov nájdete na https://schemers.org/.
Up: Návody na Scheme [Contents][Index]