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
1
are 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.