The k and q languages are general purpose programming language developed at Kx for their kdb+ database. The q language is built on top of the k language (specifically k4, the 4th generation of the k language) which has roots in APL.
I’ve written several blog entries on k and q. Here they are in reverse chronological order:
- 20091209: American Binomial Model in q
- 20091204: European Binomial Model in q and Python
- 20091204: Binomial distribution in q
- 20090913: Gray code in q
- 20090427: A Conversation with Arthur Whitney
- 20090210: Game of Life in (one line of) k
- 20090210: Game of Life in (one line of) q
- 20081215: Faster solver for (1,3,4,6) Puzzle in k
- 20081214: Solver for (1,3,4,6) Puzzle in k
- 20081214: Randomized N Queens in k
- 20081205: Finding words in k
- 20081202: N Queens in k
- 20081130: More Sudoku solvers in k and q
- 20081128: Sudoku solver translated from k to q
- 20080731: Lagrange Interpolation in q
- 20080714: Regular Expressions for q
- 20080704: Longest Increasing Subsequence in q
- 20080701: Birthday Paradox in q
- 20080624: Sieve of Eratosthenes in q
- 20080616: AES in q
Feel free to read them. Constructive criticisms are welcomed!
What makes k and q unique among the multitude of programming languages are their:
- expressiveness: High-level data structures (lists, dictionaries, tables), higher-order functions, adverbs and powerful data manipulation (group, sort, rank, etc) make it easy to express sophisticated algorithms, thus living up to the idea of “notation as a tool for thought“.
- speed: They are blazing fast for an interpreted language.
- conciseness: The compact syntax takes a little getting used to initially but after a while I really appreciate reading a few line of k and q code as opposed to many paragraphs of C/C++.
- compactness: The interpreter is about 240KB as of version 2.4. That’s incredibly small compared to other languages and database products.
- extensibility: It is really quite easy to write extensions for k and q in C/C++.
- vector processing: For problems where one has to operate on large multi-dimensional arrays, this is useful.
- database integration: It is probably true to say that k/q is kdb+ and kdb+ is k/q. Most other languages don’t have a database implementation built-in.
- functional paradigm: I am quite new to functional programming but I find it a powerful paradigm for solving problems and thinking about algorithms.
How to learn k and q
Since k and q are proprietary languages, most of the official documentation are available from Kx’s site.
There are also several sites on k, q, kdb+ and vector languages. The list below is non-exhaustive. I only list those that I know. If there are other sites that I’ve missed, do let me know:
- http://www.nsl.com (Stevan Apter)
- http://vrabi.web.elte.hu/k/ (Attila Vrabecz)
- http://homepage.hispeed.ch/milano/ (Milan Ondrus)
- http://stuntprogrammer.com (Niall Dalton)
- http://www.rendezvouswithdestiny.net/finance/finance.html (Ng Chu Ming)
- http://kdbconsulting.wordpress.com (streamstar)
- http://lifeisalist.wordpress.com (enlistme)