jq (プログラミング言語)

jqは、高水準関数型言語である。JSONバックトラッキングストリーム管理をサポートしている。この言語はIconHaskellの影響を受けている。

jq
Jq logo.png
パラダイム 関数型プログラミング、ポイントフリー ウィキデータを編集
登場時期 2012年 (9年前) (2012)
設計者 Stephen Dolan
最新リリース 1.6/ 2018年11月2日 (3年前) (2018-11-02)[1]
型付け 動的型付け
主な処理系 jq
影響を受けた言語 IconHaskell
プラットフォーム Microsoft WindowsUnix系 ウィキデータを編集
ライセンス MIT License ウィキデータを編集
ウェブサイト stedolan.github.io/jq/
テンプレートを表示

基本的な構文編集

Unixシェルのストリーム・パイプフィルタと同じ概念に基づいて設計されている。フィルタはJSON指向の構文を使用した有効なJSON式によって構築することができ、|を使用して接続する。同一性を表すフィルタは.なので、1 | {"a": .}{"a": 1}と等価である。

以下は名前と仮引数がある整数を任意のにフォーマットするフィルタを定義する方法の例である。実装がポイントフリースタイルであることを示している。

def tobase($b):
    def digit: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[.:.+1];
    def div: (. / $b) | floor;
    def mod: . % $b;
    def r: if . < $b then digit else (div | r) + (mod | digit) end;
    #
    select(2 <= $b and $b <= 36)
    | r
;

次の例は、古典的な覆面算ジェネレータを使用する方法を示している。

def send_more_money:
    def choose(m;n;used): ([range(m;n+1)] - used)[];
    def num(a;b;c;d): 1000*a + 100*b + 10*c + d;
    def num(a;b;c;d;e): 10*num(a;b;c;d) + e;
    label $exit
    | 1 as $m
    | 0 as $o
    | choose(8;9;[]) as $s
    | choose(2;9;[$s]) as $e
    | choose(2;9;[$s,$e]) as $n
    | choose(2;9;[$s,$e,$n]) as $d
    | choose(2;9;[$s,$e,$n,$d]) as $r
    | choose(2;9;[$s,$e,$n,$d,$r]) as $y
    | select(num($s;$e;$n;$d) + num($m;$o;$r;$e) == num($m;$o;$n;$e;$y))
    | [$s,$e,$n,$d,$m,$o,$r,$e,$m,$o,$n,$e,$y],
      break $exit
;

脚注編集

  1. ^ Releases”. 2018年11月8日閲覧。

関連項目編集

外部リンク編集