This section of the docs provides an overview, but here are a few different ways I'd describe it:
- It's a language that's data-oriented instead of control-oriented
- It's a language where your program is a function that is made up of functions, i.e. functions are the building blocks and there is nothing smaller nor anything bigger (even literal values like
1are treated as functions generating them) - It's a bit like programming with analog circuits, where the "circuit components" are functions
- It's a language for working with values directly instead of collections of values
What can it do?
It's a general-purpose language but it is most appropriate for cases where you are working with data of any kind, and would prefer to do things in a functional way. This section provides some examples of where you might use it.
How to use it?
The language is not a #lang, but rather, it is an "embeddable" DSL. This means that you can use it in Racket or any other host language via a normal macro, and mixing Racket and Qi in the same source file is easy.