| パラダイム | 配列、関数 |
|---|---|
| デザイン: | アーサー・ホイットニー |
| 開発者 | Kxシステム |
| 初登場 | 2003年[1] |
| 安定版リリース | 4.0 / 2020年3月17日[2] |
| タイピングの規律 | ダイナミック、力強い |
| Webサイト | コード |
| 影響を受けた | |
| A+、APL、スキーム、k | |
Q は、アーサー・ホイットニーが開発した配列処理用のプログラミング言語です。これはプロプライエタリソフトウェアで、Kx Systemsが商品化しました。Q は、ディスクベースおよびインメモリの列ベースのデータベースであるkdb+のクエリ言語として機能します。kdb+ は、言語APLの簡潔な変形である言語kに基づいています。Q は k の薄いラッパーであり、より読みやすく英語のようなインターフェイスを提供します。使用例の 1 つは金融時系列分析で、不正確な時間の一致を行うことができます。例としては、その前の入札と売りを一致させることが挙げられます。両方のタイムスタンプはわずかに異なりますが、いずれにしても一致します。[3]
概要
q の基本的な構成要素は、アトム、リスト、および関数です。アトムはスカラーであり、数値、文字、日付、および時刻 のデータ型が含まれます。リストは、アトム (またはその他のリスト) の順序付けられたコレクションであり、その上に高レベルのデータ構造の辞書とテーブルが内部的に構築されます。辞書は、キーのリストと値のリストのマップです。テーブルは、シンボル キーと値としての等長リスト (列) の転置された辞書です。キー付きテーブルは、主キーが配置されたテーブルに似ており、キーと値が 2 つのテーブルとして配置されている辞書です。
次のコードは、データ構造の関係を示しています。評価する式の前にq)プロンプトが表示され、評価の出力がその下に表示されます。
q) `john / シンボル型`johnのアトムq) 50 / 整数型50のアトム
q) `john`jack / シンボルのリスト`john`jack q) 50 60 / 整数のリスト50 60
q) `john`jack ! 50 60 / 記号のリストと整数のリストを組み合わせて辞書を作成しますjohn | 50 jack | 60
q) `name`age ! ( `john`jack ; 50 60 ) / 列辞書と呼ばれる配置name | john jack age | 50 60
q) flip `name`age ! ( `john`jack ; 50 60 ) / 関数 "flip" で転置すると、列辞書はテーブル名age -------- john 50 jack 60になります。
q) ( flip ( enlist `name ) ! enlist `john`jack ) ! flip ( enlist `age ) ! enlist 50 60 / 2 つの同じ長さのテーブルを辞書として結合すると、キー付きテーブルname | age ----| --- john | 50 jack | 60になります
これらのエンティティは、関数を介して操作されます。関数には、Q に付属する組み込み関数 ( Kマクロとして定義されています) とユーザー定義関数が含まれます。関数はデータ型であり、リスト、辞書、テーブルに配置したり、他の関数にパラメーターとして渡したりできます。
例
K と同様に、Q も解釈され、セミコロンで終了しない限り、式の評価結果がすぐに表示されます。Hello worldプログラムはこのように簡単です。
q) 「こんにちは世界!」
「こんにちは世界!」
次の式は、変数 x に格納されている文字列のリストを長さの降順で並べ替えます。
x @ idesc各xを数える
式は次のように右から左に評価されます。
- 「count each x」はリスト x 内の各単語の長さを返します。
- 「idesc」は、値のリストを降順で並べ替えるインデックスを返します。
- @ 右側の整数値を使用して、元の文字列リストにインデックスを付けます。
階乗関数はQで直接実装できる。
{ prd 1 +までx }
または再帰的に
{ $ [ x = 0 ; 1 ; × *。zs [ x - 1 ]]}
どちらの場合も、関数は暗黙的に x という単一の引数を取ることに注意してください。一般に、x、y、z という名前の最大 3 つの暗黙的な引数を使用することも、引数にローカル変数バインディングを明示的に指定することもできます。
直接実装では、式「til x」は 0 から x-1 までの整数を列挙し、「1+」はリストのすべての要素に 1 を追加し、「prd」はリストの積を返します。
再帰実装では、構文「$[condition; expr1; expr2]」は三項条件です。条件が真であれば expr1 が返され、そうでない場合は expr2 が返されます。式「.zs」は、Java の「this」または Python の「self」とほぼ同等です。これは、包含オブジェクトへの参照であり、q 内の関数が自分自身を呼び出すことを可能にします。
x が 2 より大きい整数の場合、次の関数は素数であれば 1 を返し、そうでない場合は 0 を返します。
{最小x 2剰余_最大x }
関数は右から左に評価されます。
- 「til x」は、x 未満の負でない整数を列挙します。
- 「2_」は列挙の最初の 2 つの要素 (0 と 1) を削除します。
- 「x mod」は、元の整数と切り捨てられたリスト内の各値の間でモジュロ除算を実行します。
- 「min」は、モジュロ結果のリストの最小値を検索します。
q プログラミング言語には、qSQL と呼ばれる独自のテーブル クエリ構文が含まれています。これは従来のSQLに似ていますが、主に基礎となるテーブルが行ではなく列に基づいているという重要な違いがあります。
q) tを表示します: ([] name : `john`jack`jill`jane ; age : 50 60 50 20 ) / 簡単なテーブルを定義して、"t" に割り当てますname age -------- john 50 jack 60 jill 50 jane 20
q ) tから、名前が"ja*"で、年齢が50より大きいものを選択します。 name age -------- jack 60 q )行を選択: tから年齢でi をカウントします。 age | rows ---| ---- 20 | 1 50 | 2 60 | 1
参考文献
- ^ 「Q言語がベクトルの魅力を広げる」。2007年1月1日時点のオリジナルよりアーカイブ。2016年6月1日閲覧。
{{cite web}}: CS1 maint: unfit URL (link) - ^ 「4.0 の変更点」(プレスリリース)。パロアルト:Kx Systems。2020 年 3 月 17 日。2020年4 月 15 日閲覧。
- ^ 「Qリファレンスカード」 。 2020年4月15日閲覧。
さらに読む
- Borror, Jeffry A. Q For Mortals: Qプログラミングのチュートリアル。ISBN 978-1-4348-2901-6。
- Psaris, Nick. Q Tips: 高速、スケーラブル、保守可能な Kdb+ . ISBN 978-9-8813-8990-9。
外部リンク
- 公式ウェブサイト、Kx Systems
- 公式サイト、kdb+
- オンラインドキュメントと開発者サイト
- オンライン kdb チュートリアル
- qStudio は、kdb 用の時系列チャート機能を備えた IDE です。
- Kx Developer、kdb+ 用の IDE
- GitHub の kdb+ リポジトリ
- Q for Mortalsの無料オンライン版
- Q for All ビデオチュートリアル
- 技術ホワイトペーパー
- jq、JVM 上の q の実装
