There’s a lot of implicit knowledge among Guile developers. Here I gather some useful snippets I found along the way.
Use Guile-yaml to search for the first match in a yaml file
This uses guile-libyaml to parse the yaml file and
(ice-9 match) to recursively search within the file.
The example file is demo1.yml from the guile-yaml repo:
--- doe: "a deer, a female deer" ray: "a drop of golden sun" pi: 3.14159 xmas: true french-hens: 3 calling-birds: - huey - dewey - louie - fred xmas-fifth-day: calling-birds: four french-hens: 3 golden-rings: 5 partridges: count: 1 location: "a pear tree" turtle-doves: two
I’m searching for the first match to "partridges":
(import (yaml) (ice-9 match)) (define demo (read-yaml-file "demo1.yml")) (let match-demo ((demo demo)) (match demo ((("partridges" . b) c ...) b) (else (if (pair? demo) (or (match-demo (cdr demo)) (match-demo (car demo))) #f)))) ;; => (("count" . "1") ("location" . "a pear tree"))
To use this snippet, start guile as
guile -L . in the guile-libyaml repo.