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.

verb と引数 ― J 言語入門

Last updated at Posted at 2021-06-23

値 (noun) の型の次は、verb の説明をします。verb は、これまでに出てきたように、「関数」に似た機能です。ここでは、もう少し掘り下げてみようと思います。

引数の数と名前

verb と他の言語の「関数」の違いの一つは、引数の数です。J の verb は、引数が 1 個の monad と引数が 2 個の dyad だけです。3 個以上の値を渡したい場合は、配列やボックスを使います。

monad

monad の場合、引数は verb の右側に 1 つだけです。この引数には、y という名前がついています。実際に y という変数が定義されているわけではありませんが、慣習的に この名前で呼ばれています。

NB.  -  y
     -  3

dyad

dyad の場合、2 つの引数のうち、左側は x、右側は上と同様に y と呼びます。これらの名前は頻繫に使うので、覚えておいてください。

NB.  x  -  y
     5  -  3

何もしない verb

verb の中には、計算をせず、引数を返すだけのものがあります。単独では使いませんが、他の機能と組み合わせると便利な場合があります。

]

] は、右の引数 (y) を返す verb です。monad も dyad も、常に y を返します。

   ]3
3
   5 ] 3
3

[

[ は、左の引数 (x) を返す verb です。dyad は x を返しますが、monad の場合は x の代わりに y を返します 1

   [3
3
   5 [ 3
5

代入との組み合わせ

][ は、代入 (=:) と一緒に使うと便利です。

代入 a=: b の実行結果は b と同じ値です 2 が、最後に実行した式が代入の場合、 REPL は その結果は表示しません。

   NB. 実行結果は 100 だけど、次の行に表示されない
   a=: 100
   NB. b には a=: 200 の実行結果 (200) が代入される
   b=: a=: 200

しかし、代入と同時に代入した値を確認したい場合があります。以下のように変数名を再入力すれば確認できます 3 が、2 回に分けて入力するのは面倒ですよね。

   a=: i.3
   a
0 1 2

そこで役に立つのが ] (monad) です。代入の結果を ] に渡すことで、最後に実行されるのが ] になるので、REPL は結果を表示します。もちろん、[ (monad) を使っても同じです。

   NB. ] (a=: i. 3)
   ]a=: i.3
0 1 2

さらに、複数の代入を一行で実行したい場合には、[ (dyad) が使えます。

   NB. a=: i. (3 [ (b=: 'abc' ; 'de'))
   a=: i.3 [ b=: 'abc' ; 'de'

一見何をしているのか分かりづらいですが、式の実行の順序 (右から左) を考えれば解読できると思います。


[ 前 : データ型のまとめ ] [ 目次 ] [ 次 : 高階関数 ]

  1. したがって、]y[y は同じ動作になります。

  2. J の代入は文ではなく式です。

  3. これまでの例では、この方法を使っていました。

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?