actions

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

2018/9/28/ (金) 11:43時点におけるAdmin (トーク | 投稿記録)による版 (演算子の合成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
J
テンプレートを表示

Jはプログラミング言語の一種で、正式名称はアルファベット1文字の「J」だがC言語と同様、「J言語」と一般には呼ばれている。

概要

Jは1989年APLの提案者でもあるケネス・アイバーソンによりAPLの後継として提案された。APLは数式の表記、特に配列の処理に優れており、多くの計算式を極めて単純に表記できる利点を持っていたが、ギリシャ文字やその他の特殊記号を使用するため、利用にはフォントの設定など特殊な環境の準備が必要があり、可読性の低さもあって普及には至らなかった。

JはAPLの反省をふまえて、APLと同様の計算を通常のASCIIコードのみで使用できるようにした。この際、ジョン・バッカスによるFP言語English版FL言語English版という関数レベルプログラミング言語English版の影響を受けている(バッカスによるふたつの言語はAPLの影響を受けている)。さらにAPLにあった「作用子」による演算子の合成といった機能が、より拡張強化されている。これらの機能によりAPLのような表記の問題は解消された。しかし、 例えば、APLでは

  𝜄i

と表記するのが、Jでは

  i. i

となるなど、変数と演算子の区別がつきにくくなり、可読性が落ちている。

データ型と記法(リテラル)

種類

Jのデータ型は他の言語のような整数浮動小数点数文字列の他に有理数複素数などもある。

リテラル

以上の型の基本的なリテラル・記法の他、数値は任意の底(基数)nでの表記(n進法)の記法がある。

なお、以下では型と記法の識別を完全に欠いて説明しているので注意。

整数

整数の表記は基本的には他の言語と同じである、しかしJでは負の数は "-"(マイナス)ではなく "_"(アンダースコア)を用いる。さらに "_" を単体で使用すると「無限」として処理される。

  • 5 - 6 [math]\to[/math] _1
  • _1 * _ [math]\to[/math] __ (-∞)

浮動小数点数

浮動小数点数の表記も基本的には他の言語と同じである。ただし J では "."(ピリオド)が演算子に大きな影響を与えるため ".5" のような表記(他言語では0.5として処理される)は許されない。数字の間に "e" を入れる指数表示は他言語同様 J でも実装されている(例 1.2e3 [math]\to[/math] 1200)。

有理数

有理数は(分子)r(分母)と表記する。(例 2r3 [math]\to 2/3[/math]を意味する)

複素数

複素数は(実数部)j(虚数部)と表記する。この他にも(絶対値)ad(度数偏角)、(絶対値)ar(ラジアン偏角)と表記するとそれに対応する複素数を返す。

  • 5j4 [math]\to 5 + 4i[/math]を意味する。
  • 2ad3 [math]\to[/math]1.99726j0.104672
  • 5ar0.927295 [math]\to[/math] 3j4

n進法

任意の底(基数)nによるn進法での数値は、(基底)b(数字)という表記する。基底は小数点を含んでもかまわない。

  • 2b101 [math]\to[/math] 5
  • 3b212 [math]\to[/math] 23
  • 16bff [math]\to[/math] 255
  • 0.1b12 [math]\to[/math] 2.1

演算子の種類

JはAPLの特殊文字を全てASCIIコードを組み合わせた演算子として扱うため、膨大な数の演算子を持つ。具体的には演算子の後にコロンやピリオドを加えると別の演算子として扱われる。またAPL同様、演算子を前置記法として使う場合と中置記法として使う場合にかなりはっきりとした意味の違いを持たせている。

一例を以下の表で表す、Jの演算は通常は算術演算子として扱うが、被演算子が1または0の場合は論理演算として扱われる。

演算子 前置記法として使用する場合 中置記法として使用する場合
+ 共役複素数を返す。 足し算
+: 2倍にする。 (論理演算)否定論理和を返す。
+. 複素数の実数部と虚数部を分離してリストの形式で返す。 最大公約数(論理演算の場合は論理和)を返す。
* 符号(正なら 1、負なら _1、零なら 0)を返す。 かけ算
*: 2乗にする。 (論理演算)否定論理積を返す。
*. 複素数極座標に変更してリストの形式で返す。 最小公倍数(論理演算の場合は論理積)を返す。

また J での計算順序は APL と同様に右の演算子が優先される。例えば 8 - 5 - 9 は 8 - (5 - 9)であり、12 が返される。

脚注

外部リンク