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.

direct definition ― J 言語入門

Last updated at Posted at 2021-07-02

explicit definition の欠点の一つは、入れ子にできないことです。それを補うために direct definition という構文があります 1

構文

direct definition (直接的な定義) は、{{}} で定義部を囲う構文です。

   average=: {{
      sum=. +/y
      count=. #y
      sum % count
   }}

一行で書くこともできます。

   average=: {{ (+/y) % (#y) }}

explicit definition とは異なり、最後の }} の直後に式を続けられます。また、入れ子にして使うこともできます。

   1 {{
      f=. {{ x , y }}
      y f x
   }} 2
2 1

direct definition と explicit definition

direct definition の実体は explicit definition で、両者には構文上の違いしかありません。

   {{ x + y }}
4 : 'x + y '

explicit definition は ほとんど direct definition で置き換え可能です。ただし、Note でコメントアウトする方法は direct definition では使えません。(そのため、グローバルな変数の定義では explicit definition を使った方が便利かもしれません。)

種類の指定

direct definition は、monad, dyad 等の種類を指定しなくても使われている変数名から自動で決定してくれます。具体的には以下のように決定されます。

  1. vn が使われていれば conjunction
  2. そうでなく um が使われていれば adverb
  3. そうでなく x が使われていれば dyad か dual-valence
  4. そうでなければ monad

明示的に何を定義するのか指定することもできますが、少し変わった構文になります。{{ の直後に閉じ括弧 ) と次の表の 1 文字を続けます。

文字 種類
* デフォルト (何も指定しないのと同じ)
m monad
d dyad
v verb
a adverb
c conjunction
n noun
   NB. monad と dyad を : で区切るのは explicit definition と同じ
   {{)v
      <y
   :
      x ; y
   }}
3 : 0
      <y
:
      x ; y
   
)

{{) を書いた行には、それより後に書いてもよいのはコメントとスペースだけです。

noun

noun の direct definition は特殊な構文になっています。{{)n の直後から文字列が始まり、2 種類の書き方ができます。

一行

{{)n のある行に }} がある場合、そこまでが文字列になります。' (シングルクォーテーション) を含む文字列リテラルを書くのに便利です 2

   {{)nText '...'}}
Text '...'

{{)n の後にスペースは要らないことに注意してください。

複数行

{{)n がその行で終わらない場合、次に行の先頭}} が現れるまで文字列が続きます。他の位置にある }} は単に文字列の一部になります。

   {{)nabcde
12345
... }}
}}
abcde
12345
... }}

最後の改行は文字列に含まれます{{)n の次の文字が改行の場合は、その改行は文字列に含まれません


[ 前 : define の実体 ] [ 目次 ] [ 次 : 制御構文 ]

  1. J902 で追加された新しい機能です。そのため、シンタックスハイライトが まだ対応していません (2021 年 7 月現在)。

  2. ただし、}} をエスケープする方法はありません。

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?