Lably
Skip to content

Q (programming language from Kx Systems)

  • 7 min read
  • 2 chapters

Related on Lably

Through Database, Data type and Unique key

Overview

The fundamental building blocks of q are atoms, lists, and functions. Atoms are scalars and include the data types numeric, character, date, and time. Lists are ordered collections of atoms (or other lists) upon which the higher level data structures dictionaries and tables are internally constructed. A dictionary is a map of a list of keys to a list of values. A table is a transposed dictionary of symbol keys and equal length lists (columns) as values. A keyed table, analogous to a table with a primary key placed on it, is a dictionary where the keys and values are arranged as two tables.

The following code demonstrates the relationships of the data structures. Expressions to evaluate appear prefixed with the q) prompt, with the output of the evaluation shown beneath:

<span id="mwLg"></span><span class="gp" id="mwLw">q)</span><span class="ss" id="mwMA">`john</span><span class="w" id="mwMQ"> </span><span class="c1" id="mwMg">/ an atom of type symbol</span> <span class="ss" id="mwMw">`john</span> <span class="gp" id="mwNA">q)</span><span class="il" id="mwNQ">50</span><span class="w" id="mwNg"> </span><span class="c1" id="mwNw">/ an atom of type integer</span> <span class="il" id="mwOA">50</span> <span class="gp" id="mwOQ">q)</span><span class="ss" id="mwOg">`john`jack</span><span class="w" id="mwOw"> </span><span class="c1" id="mwPA">/ a list of symbols</span> <span class="ss" id="mwPQ">`john`jack</span> <span class="gp" id="mwPg">q)</span><span class="il" id="mwPw">50</span><span class="w" id="mwQA"> </span><span class="il" id="mwQQ">60</span><span class="w" id="mwQg"> </span><span class="c1" id="mwQw">/ a list of integers</span> <span class="il" id="mwRA">50</span><span class="w" id="mwRQ"> </span><span class="il" id="mwRg">60</span> <span class="gp" id="mwRw">q)</span><span class="ss" id="mwSA">`john`jack</span><span class="o" id="mwSQ">!</span><span class="il" id="mwSg">50</span><span class="w" id="mwSw"> </span><span class="il" id="mwTA">60</span><span class="w" id="mwTQ"> </span><span class="c1" id="mwTg">/ a list of symbols and a list of integers combined to form a dictionary</span> <span class="n" id="mwTw">john</span><span class="o" id="mwUA">|</span><span class="w" id="mwUQ"> </span><span class="il" id="mwUg">50</span> <span class="n" id="mwUw">jack</span><span class="o" id="mwVA">|</span><span class="w" id="mwVQ"> </span><span class="il" id="mwVg">60</span> <span class="gp" id="mwVw">q)</span><span class="ss" id="mwWA">`name`age</span><span class="o" id="mwWQ">!</span><span class="p" id="mwWg">(</span><span class="ss" id="mwWw">`john`jack</span><span class="p" id="mwXA">;</span><span class="il" id="mwXQ">50</span><span class="w" id="mwXg"> </span><span class="il" id="mwXw">60</span><span class="p" id="mwYA">)</span><span class="w" id="mwYQ"> </span><span class="c1" id="mwYg">/ an arrangement termed a column dictionary</span> <span class="n" id="mwYw">name</span><span class="o" id="mwZA">|</span><span class="w" id="mwZQ"> </span><span class="n" id="mwZg">john</span><span class="w" id="mwZw"> </span><span class="n" id="mwaA">jack</span> <span class="n" id="mwaQ">age</span><span class="w" id="mwag"> </span><span class="o" id="mwaw">|</span><span class="w" id="mwbA"> </span><span class="il" id="mwbQ">50</span><span class="w" id="mwbg"> </span><span class="il" id="mwbw">60</span> <span class="gp" id="mwcA">q)</span><span class="nb" id="mwcQ">flip</span><span class="w" id="mwcg"> </span><span class="ss" id="mwcw">`name`age</span><span class="o" id="mwdA">!</span><span class="p" id="mwdQ">(</span><span class="ss" id="mwdg">`john`jack</span><span class="p" id="mwdw">;</span><span class="il" id="mweA">50</span><span class="w" id="mweQ"> </span><span class="il" id="mweg">60</span><span class="p" id="mwew">)</span><span class="w" id="mwfA"> </span><span class="c1" id="mwfQ">/ when transposed via the function "flip", the column dictionary becomes a table</span> <span class="n" id="mwfg">name</span><span class="w" id="mwfw"> </span><span class="n" id="mwgA">age</span> <span class="o" id="mwgQ">--------</span> <span class="n" id="mwgg">john</span><span class="w" id="mwgw"> </span><span class="il" id="mwhA">50</span> <span class="n" id="mwhQ">jack</span><span class="w" id="mwhg"> </span><span class="il" id="mwhw">60</span> <span class="gp" id="mwiA">q)</span><span class="p" id="mwiQ">(</span><span class="nb" id="mwig">flip</span><span class="w" id="mwiw"> </span><span class="p" id="mwjA">(</span><span class="ow" id="mwjQ">enlist</span><span class="w" id="mwjg"> </span><span class="ss" id="mwjw">`name</span><span class="p" id="mwkA">)</span><span class="o" id="mwkQ">!</span><span class="ow" id="mwkg">enlist</span><span class="w" id="mwkw"> </span><span class="ss" id="mwlA">`john`jack</span><span class="p" id="mwlQ">)</span><span class="o" id="mwlg">!</span><span class="nb" id="mwlw">flip</span><span class="w" id="mwmA"> </span><span class="p" id="mwmQ">(</span><span class="ow" id="mwmg">enlist</span><span class="w" id="mwmw"> </span><span class="ss" id="mwnA">`age</span><span class="p" id="mwnQ">)</span><span class="o" id="mwng">!</span><span class="ow" id="mwnw">enlist</span><span class="w" id="mwoA"> </span><span class="il" id="mwoQ">50</span><span class="w" id="mwog"> </span><span class="il" id="mwow">60</span><span class="w" id="mwpA"> </span><span class="c1" id="mwpQ">/ two equal length tables combined as a dictionary become a keyed table</span> <span class="n" id="mwpg">name</span><span class="o" id="mwpw">|</span><span class="w" id="mwqA"> </span><span class="n" id="mwqQ">age</span> <span class="o" id="mwqg">----|</span><span class="w" id="mwqw"> </span><span class="o" id="mwrA">---</span> <span class="n" id="mwrQ">john</span><span class="o" id="mwrg">|</span><span class="w" id="mwrw"> </span><span class="il" id="mwsA">50</span> <span class="n" id="mwsQ">jack</span><span class="o" id="mwsg">|</span><span class="w" id="mwsw"> </span><span class="il" id="mwtA">60</span>

These entities are manipulated via functions, which include the built-in functions that come with Q (which are defined as K macros) and user-defined functions. Functions are a data type, and can be placed in lists, dictionaries and tables, or passed to other functions as parameters.

Sign in to keep reading

One more chapter is free with a Lably account.

More in Computing and information technology