0
1

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.

文字と文字列 ― J 言語入門

Posted at

数値の次は文字を扱います。前回に引き続き配列の話がメインです。

文字列リテラル

文字列は、' (シングルクオーテーション) で囲んで表記します。

   'Hello, world!'
Hello, world!
   'abc''123'''
abc'123'

' 自体を表すには、'' と書きます。改行等の特殊な文字をエスケープする方法はありません

文字列は、文字のリストなので、ベクターと同様の機能が使えます。

   a=: 'abcde'
   #a
5
   2 { a
c
   a i. 'e'
4

文字

リテラルが ちょうど 1 文字 1 だけ含む場合、それは「文字」を表します。

'a'   NB. 文字
''''  NB. 文字
'ab'  NB. 文字列
''    NB. (空の) 文字列

「文字」と「文字列」の関係は、「数値」と「ベクター」の対応に似ています。

0      NB. 数値
0 1    NB. ベクター

文字を並べたものが文字列に、数値を並べたものがベクターになります。

連結

リストの連結には , (dyad) を使います。

   'abc' , 'de'
abcde
   'a' , 'bc' , 'd'
abcd
   'a' , 'b'
ab

これを使うと、改行などを含めることができます。

   'abc' , LF , 'de'
abc
de

, はリストの操作なので、数値の場合も同じように使えます。

   1 2 3 , 0 1
1 2 3 0 1

文字と数値

文字と数値は型が違うので、混ぜるとエラーになります。暗黙の変換が行われることもありません。

   1 2 , 'ab'
|domain error
|   1 2    ,'ab'

domain error は、予期しない値が使われたことを示しています。(J でコードを書くにあたって、一番よく見るエラーだと思います。)

+* を文字に対して使うこともできません。

   'ab' + 'c'
|domain error
|   'ab'    +'c'
   'ab' * 2
|domain error
|   'ab'    *2

バイト / 整数 の変換

0 以上 255 以下のバイト値が、a. というリストに順番に格納されています。(a. の要素の型は文字です。) これによって、文字と整数の相互変換ができます。

   65 { a.     NB. 整数 -> 文字
A
   a. i. 'A'   NB. 文字 -> 整数
65

a. は制御文字も含んでいるので、直接中身を見ることはできません。印字可能な文字の一覧は、次のようにすれば得られます。

(32 + i.95) { a.

比較

さて、ここで比較の話をしておきます。比較には以下の verb (いずれも dyad) を使います。

  • = ~:
  • < <: > >: (数値のみ)

~: は「等しくない」を表し、<:>: はそれぞれ「以下」「以上」を意味します。それ以外は、他の言語と同じです。

   1 = 1
1
   1 = 0
0
   'a' = 'a'
1
   'a' ~: 'b'
1
   0 > 1
0
   1 <: 2
1
   1 >: 1
1

=~: は、数値と文字とを比較することもできます 2

   1 = '1'
0
   1 ~: '1'
1

リストの比較

= をリストに対して使うと、面白い結果が得られます。

   a
abcde
   a = 'apple'
1 0 0 0 1
   a = 'd'
0 0 0 1 0
   a = 'abc'
|length error
|   a    ='abc'

なんと、それぞれの要素 (文字) について、比較が行われているのです。試してみれば分かりますが、ベクターでも同様です。

上に挙げた比較の verb は全て、「1 つの値」ごとに比較します。この「1 つの値」(つまり 数値や文字) のことを、アトム (atom) と呼びます。比較だけでなく + 等も、アトムに対する演算です。

アトムごと ではなく、全体を比較するには、-: を使います。

   a -: 'a'
0
   a -: 'abcde'
1

配列を比較する場合は、気をつけるようにしましょう。


[ 前 : 数値の配列 (ベクター) ] [ 目次 ] [ 次 : 多次元配列 ]

  1. 正確には 1 バイト。

  2. 等しくなることはありませんが。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?