0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

adverb と conjunction ― J 言語入門

Last updated at Posted at 2021-06-26

modifier の性質

verb は noun を引数にとり、noun の結果を返します。noun は、数値や文字列などの いわゆる「データ」のことです。つまり、verb は「データの処理」を表しています。

一方、modifier (adverb と conjunction) は異なる性質をもっています。

被演算子 結果
noun (m / n) または verb (u / v) noun, verb, adverb, conjunction いずれも可 1

modifier は、noun や verb をパラメータとする「テンプレート」のようなものです。

adverb

adverb は、被演算子が 1 つの modifier です。被演算子は左側に置きます。

   NB. (,) ~
   ,~
,~

3 行目は REPL の出力で、結果の verb が表示されています 2

conjunction

conjunction は、被演算子が 2 つの modifier です。被演算子は左側と右側の両方に置きます。

   NB. (0) & (,)
   0&,
0&,

部分適用

conjunction の どちらか一方の被演算子を省略して、adverb を作ることができます。その adverb に被演算子を与えると、省略された部分が埋まります。

   -@
-@
   +(-@) 
-@+
   +(&1)
+&1

値の区分

ここまで、modifier として ひとまとめにして扱ってきましたが、adverb と conjunction は独立した区分です。J で扱う値には以下の 4 つの区分があります。

  • noun
  • verb
  • adverb
  • conjunction

verb は更に、monad と dyad を含んでいて、monad / dyad 両方の使い方ができる verb (+ など) もあります。一方、adverb と conjunction は別物なので、両方を兼ねることはできません

modifier は値の区分ではなく、adverb と conjunction の総称です。

優先順位

verb と verb の間には優先順位の差はなく、常に右結合 (右から左の順) でしたね。

   NB. - (2 * (3 - 1))
   -2 * 3 - 1
_4

modifier どうしの間にも、優先順位の差はありませんが、modifier は常に verb よりも優先されます。また、実行の順序も、modifier が先です。

   ,&2 -3   NB. (, & 2) (- 3)
_3 2
   ] -3     NB.    ]    (- 3)
_3
   - 1&, 4  NB. - ((1 & ,) 4)
_1 _4
   - ] 4    NB. - (   ]    4)
_4

] を使った例と比較すると、& の結果が 1 つの verb として解釈されているのが分かりますね。verb を優先させるには、括弧を使います。

   ,&(2 - 3)
,&_1
   (-1)&,
_1&,

結合性

verb とは異なり、modifier は左結合 (左から右) です。言葉では分かりにくいと思うので、実際に例を見てみましょう。

   NB. ((+ /) @ i.) 10
   +/@i. 10
45

+/ を以前に紹介した際に少し触れましたが、/ も adverb です。この例では、0 から 9 までの整数の総和を求めています。左側にある / が、右側の @ よりも先に解釈されています 3

複雑な式でも、同じです。どんな modifier でも左から右の順序に統一されているので、慣れれば難しくありません。

   NB. ((1 & +) @ i.) 10
   1&+@i. 10
1 2 3 4 5 6 7 8 9 10
   NB. 2 ((% @ -) ~) 3
   2 %@-~ 3
1

順序を変えるには、括弧を使います。

   NB. (- @ (+ /)) 2 3 5
   -@(+/) 2 3 5
_10

優先順位と結合性について、簡単にまとめておきます 4

  • modifier は verb よりも優先して左から右の順
  • verb は右から左の順

[ 前 : 高階関数 ] [ 目次 ] [ 次 : 代入 ]

  1. ただし、modifier の多くは verb を返します。

  2. REPL は、verb や modifier を そのままの形で表示します。慣れないうちは読みにくいかもしれません。

  3. 逆に + (/ @ i.) と右から解釈した場合エラーになります (/ は noun でも verb でもないため)。

  4. 単純なルールですが、全ての verb / modifier に例外なく当てはまります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?