Guix uses the Guile implementation of Scheme. To start playing with the
language, install it with
guix install guile and start a
REPL—short for read-eval-print loop—by running
guile from the command line.
Alternatively you can also run
guix shell guile -- guile
if you’d rather not have Guile installed in your user profile.
In the following examples, lines show what you would type at the REPL; lines starting with “⇒” show evaluation results, while lines starting with “-|” show things that get printed. See Using Guile Interactively in GNU Guile Reference Manual, for more details on the REPL.
#f) stand for the Booleans “true” and “false”, respectively.
Examples of valid expressions:
The above procedure returns the square of its argument. Since everything is
an expression, the
lambda expression returns an anonymous procedure,
which can in turn be applied to an argument:
((lambda (x) (* x x)) 3) ⇒ 9
(define a 3) (define square (lambda (x) (* x x))) (square a) ⇒ 9
(define (square x) (* x x))
(list 2 a 5 7) ⇒ (2 3 5 7)
`(2 a 5 7 (2 ,a 5 ,(+ a 4))) ⇒ (2 a 5 7 (2 3 5 7))
Note that the above result is a list of mixed elements: numbers, symbols (here
a) and the last element is a list itself.
let(see Local Bindings in GNU Guile Reference Manual):
let* to allow later variable declarations to refer to earlier
#:(hash, colon) followed by alphanumeric characters:
#:like-this. See Keywords in GNU Guile Reference Manual.
%is typically used for read-only global variables in the build stage. Note that it is merely a convention, like
_in C. Scheme treats
%exactly the same as any other letter.
define-module(see Creating Guile Modules in GNU Guile Reference Manual). For instance
(define-module (guix build-system ruby) #:use-module (guix store) #:export (ruby-build ruby-build-system))
defines the module
guix build-system ruby which must be located in
guix/build-system/ruby.scm somewhere in the Guile load path. It
depends on the
(guix store) module and it exports two variables,
Going further: Scheme is a language that has been widely used to teach programming and you’ll find plenty of material using it as a vehicle. Here’s a selection of documents to learn more about Scheme:
- A Scheme Primer, by Christine Lemmer-Webber and the Spritely Institute.
- Scheme at a Glance, by Steve Litt.
- Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman, with Julie Sussman. Colloquially known as “SICP”, this book is a reference.
You can also install it and read it from your computer:guix install sicp info-reader info sicp
An unofficial ebook is also available.
You’ll find more books, tutorials and other resources at https://schemers.org/.