Topological sorting is an algorithm that takes a graph consisting of nodes and other nodes that depend on them, forming a partial order, and returns a list representing a total ordering of the graph. If the graph is cyclic, the topological sort will fail. The procedure topological-sort returns three values. If sorting succeeds, the first value contains the result and the second and third are #false. If sorting fails, the result is #false and the second and third value may provide additional information about the error.
Topological sorting is an algorithm that takes a graph consisting of nodes and other nodes that depend on them, forming a partial order, and returns a list representing a total ordering of the graph. If the graph is cyclic, the topological sort will fail. The procedure topological-sort returns three values. If sorting succeeds, the first value contains the result and the second and third are #false. If sorting fails, the result is #false and the second and third value may provide additional information about the error.
Data validation and type checking (supposedly) make for more correct code. And faster code too, sometimes. And, in rare cases, code that's easier to follow than the un-checked one. Unfortunately, Scheme does not have many (type-)checking primitives out of the box. This SRFI provides some, with the aim of allowing more performant and correct code with minimum effort on the user side. Both (manual) argument checking/validation (check-arg) and return value(s) (values-checked) checking/coercion are provided. Syntax sugar like lambda-checked and define-checked is added on top.
Utility procedures provided by this SRFI in addition to the R6RS API may be categorized as follows:
Constructors:
alist->eq-hashtable,alist->eqv-hashtable,alist->hashtableAccess and mutation:
hashtable-lookup,hashtable-intern!Copying:
hashtable-empty-copyKey/value collections:
hashtable-values,hashtable-key-list,hashtable-value-list,hashtable-entry-listsIteration:
hashtable-walk,hashtable-update-all!,hashtable-prune!,hashtable-merge!,hashtable-sum,hashtable-map->lset,hashtable-findMiscellaneous:
hashtable-empty?,hashtable-pop!,hashtable-inc!,hashtable-dec!
Procedures in this SRFI are drawn primarily from SRFI 69 and R6RS. In addition, the following sources are acknowledged:
hash-table-mutable?procedure and the second argument ofhash-table-copy(which allows the creation of immutable hash tables) are from R6RS, renamed in the style of this SRFI.hash-table-intern!procedure is from Racket, renamed in the style of this SRFI.hash-table-findprocedure is a modified version oftable-searchin Gambit.procedures
hash-table-unfoldandhash-table-countwere suggested by SRFI 1.procedures
hash-table=?andhash-table-mapwere suggested by Haskell'sData.Map.Strictmodule.procedure
hash-table-map->listis from Guile.
The procedures hash-table-empty?, hash-table-empty-copy, hash-table-pop!, hash-table-map!, hash-table-intersection!, hash-table-difference!, and hash-table-xor! were added for convenience and completeness.
Pre-built Guile for bootstrapping purposes.
Guile Shapefile is a Guile library for reading shapefiles.
Provides bindings for GNOME's libnotify C library to Guile
Provides bindings for GNOME's libnotify C library to Guile
Guile-colorized provides you with a colorized REPL for GNU Guile.
PFFI is a portable foreign function interface for R6RS Scheme implementations.
Guile-websocket provides an implementation of the WebSocket protocol as defined by RFC 6455.
Guile Hoot is a WebAssembly compiler backend for GNU Guile and standalone WASM toolchain.
Guile-OpenGL is a library for Guile that provides bindings to the OpenGL graphics API.
This package provides an R6RS Scheme library for text-oriented consoles with keyboard and mouse input.
Guile Documentá is a command-line program and accompanying library to generate API documentation for GNU Guile projects.
This package provides an implementation of ActivityStreams and ActivityPub in Guile. It includes a full (currently demo) web server.
guile-dbi is a library for Guile that provides a convenient interface to SQL databases. This package implements the interface for MySQL.
This package provides Guile bindings to GnuTLS, a library implementation the TLS protocol. It supersedes the Guile bindings that were formerly provided as part of GnuTLS.
This package provides functions to generate Guix manifests interactively. It works by scanning an alist of package categories, to ask the user which package sets would they like to install from it.
This package provides bindings for GNU Parted library, a C library allowing disk partition tables creation and manipulation. The bindings are written in pure Scheme by using Guile's foreign function interface.
Guile-Plotutils is a Guile binding to the venerable GNU Plotutils plotting and graphing library. If you want to make graphs that look like you went to university in the 1990s, this is the library for you.
This package provides a Guile library to parse command line arguments into structured objects. It allows declaring arguments through a small DSL, then call a procedure to parse the command line into a structured object.
Guile-Gcrypt provides a Guile interface to a subset of the GNU Libgcrypt crytographic library. It provides modules for cryptographic hash functions, message authentication codes (MAC), public-key cryptography, strong randomness, and more. It is implemented using the foreign function interface (FFI) of Guile.