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
term:
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
Procedures are regular values just like numbers, strings, Booleans, and so on.
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)
module to
create and process lists (see list processing in GNU Guile
Reference Manual). Here are some of the most useful ones in action:
(use-modules (srfi srfi-1)) ;import list processing procedures (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
Notice how the first argument to map
, filter
, remove
,
and find
is a procedure!
'(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
and unquote
: #~
(or gexp
) and
#$
(or ungexp
). They let you stage code for later
execution.
For example, you’ll encounter gexps in some package definitions where they provide code to be executed during the package build process. They look like this:
(use-modules (guix gexp) ;so we can write gexps (gnu packages base)) ;for 'coreutils' ;; Below is a G-expression representing staged code. #~(begin ;; Invoke 'ls' from the package defined by the 'coreutils' ;; variable. (system* #$(file-append coreutils "/bin/ls") "-l") ;; Create this package's output directory. (mkdir #$output))
See G-Expressions in GNU Guix Reference Manual, for more on gexps.
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
.
See Package Modules in GNU Guix Reference Manual, for info on modules that define packages.
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]