2001-03-01から1ヶ月間の記事一覧

APL/J言語:表のボーダリング

APL/J言語:表のボーダリング ユーティリティ関数overとbyはテーブルに項目名をつけて見やすくします。 これらは理解することよりも使われることを狙ったユーティリティ関数です。 over=: ({.;}.)@":@, by=: ' '&;@,.@[,.] primes=: 2 3 5 i=: 0 1 2 3 4 pri…

APL/J言語:関数テーブル

APL/J言語:関数テーブル 小学校で足し算の振る舞いについて習うときに一覧表が役に立つように、その他の動詞(関数)の振る舞いについて、一覧表を作成することで意味が明解になります。次ページから何ページかで関数テーブルの作り方と、ユーティリティ関数…

APL/J言語:文法

APL/J言語:文法 fahrenheit =: 50 (fahrenheit - 32) * 5%9 10 prices =: 3 1 4 2 orders =: 2 0 2 1 orders * prices 6 0 8 2 +/ orders * prices 16 +/ \ 1 2 3 4 5 1 3 6 10 15 2 3 * / 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 (cube=: ^&3) i. 9 0 1 8 27 64…

APL/J言語:アルファベットと数字

APL/J言語:アルファベットと数字 (a. {~ j +/ i.26) ; (j +/ i.6) ; (j=: a. i. 'aA') ; ($ a.) +--------------------------+--------------------+-----+---+ |abcdefghijklmnopqrstuvwxyz|97 98 99 100 101 102|97 65|256| |ABCDEFGHIJKLMNOPQRSTUVWXYZ|…

APL/J言語:スペリング

以下書きかけですが、翻訳しなくても自明かもしれない。 - APL/J言語:スペリング phr=:'index=:a.i.''aA''' ;:phr +-----+--+--+--+----+ |index|=:|a.|i.|'aA'| +-----+--+--+--+----+ $ ;:phr 5 >;:phr index =: a. i. 'aA' (do=: ".) phr 97 65 do 'abc …

APL/J言語:サンプル・トピック

APL/J言語:サンプル・トピック これからのパートではさまざまなトピックでJ言語の例を示している。ディクショナリーと実際にJ言語のシステムを動かすことを前提に書かれている。また、帰納的に使われることを想定している。すなわち、 1.文を読み、左側のマ…

APL/J言語:二次的動詞

以下は書きかけです。 - APL/J言語:二次的動詞 J言語が提供する原始動詞(プリミティブまたはプライマリー)を補強するものとして、二次的動詞(セカンダリー)というものをわかりやすい名称で提供すると便利だろう。下記の例では名称の最初は大文字にしている…

APL/J言語:アイデンティティ関数とニュートラル

以下、書きかけです。 - APL/J言語:アイデンティティ関数とニュートラル 単項動詞の0&+と1&*はアイデンティティ関数と呼ばれます。ここで0と1はそれぞれ二項動詞+と*のアイデンティティ要素、またはニュートラルと呼ばれます。空のリストに挿入すると挿入さ…

APL/J言語:線形関数

APL/J言語:線形関数 関数fがすべての引数x,yについてf(x+y)と(f x)+(f y)が等しいならば、関数fは線形である。 f=: 3&|. @: +: @: |. NB.リバースして、2倍して、位置0-2を後ろへ移動 ]x=: i.# y=:2 3 5 7 11 NB.ベクトルx、yを定義 0 1 2 3 4 x+y 2 4 7 10…

APL/J言語:C.(ラージシードット、サイクル)

APL/J言語:C.(ラージシードット、サイクル) pがi.nの要素からなる順列ならば,pはn次の順列ベクトルと呼ばれる。 n=#b(bの要素数がn)ならば、p{bはbの要素の順列である。C.pはボックス化されたi.#pの要素からなる表を返す。この表はpの順列の標準サイクル表…

疎配列について

このテキストのこれからの部分は、6つの章からなる。すなわち、1.イントロ、2.表現、3.主張(証明)、4.追加例、5.疎線形代数、6.インプリステータスである。1.イントロJ言語の疎配列拡張について、"ゼロを含まない"表現を用いて説明する。$.(ドルドット、スパ…

APL/J言語:$.(ドルドット、スパース)

APL/J言語:$.(ドルドット、スパース)$.yは密配列を疎配列(スパースアレイ)にする。逆に$.^:_1 yは疎配列を密配列にする。任意の関数fについて同一性の式f -: f&.$.とf -: f&.($.^:_1)が成立する。例外としては{.(左波かっこドット、左ブレイスドット、オー…

APL/J言語:{(左ブレイス、左波かっこ、カタログ、フロム)

APL/J言語:{(左ブレイス、左波かっこ、カタログ、フロム) {(左ブレイス、左波かっこ、カタログ){yのように単項動詞として使われると、yの各ボックスの要素同士の組合せのカタログを作成する。その結果、通常作成されるカタログは$yのシェイプである。 { 'ht…

APL/J言語:順列(permutations)

アナグラムは順列という概念のよい例です。 w=: 'STOP' 3 2 0 1 { w POST 2 3 1 0 { w OPTS 3 0 2 1 { w PSOT 上記{(左波かっこ、左ブレイス)の左側引数はそれ自身がリストi.4の順列ベクトルです。 pを順列ベクトルとすると、p&C.(ラージシードット)とp&{(左…

APL/J言語:イテレーション(繰り返し)

プロセスの繰り返しや、一連の似たようなプロセスの連なりのことをイテレーションと呼びます。イテレーションの多くは非明示的です。たとえば*/bやa*/b、a*bなどです。(訳注:bがリストの場合、それぞれにかかる) 明示的イテレーションはパワー接続詞の^:(キ…

APL/J言語:A.(ラージエードット、アナグラムインデックス)

yを長さnのベクトル(例:0 1 2...(n-1))とすると要素の順列の数はnの階乗です(! n)。ユーティリティ動詞tapを次のように定義すると、tap nですべての順列が列挙されます。 tap=: i. @ ! A. i. NB.=>((i.@!) A. i.)というフォーク。従ってtap 3 => (i.@!)3 A.…

APL/J言語:再帰(リカーション)

J言語には階乗については!(エクスクラメーションマーク)という専用の動詞が用意されていますが、階乗は普通nの階乗はn-1の階乗にnを掛けたもの、というような定義をします。なお0の階乗は1です。このような定義の仕方は定義される関数が定義の中に出てくるの…

APL/J言語:動名詞とアジェンダ

動名詞(gerund)と式次第(アジェンダ) 英語では、動名詞ジェランドとは動詞の力を保持した名詞のことである。たとえばクッキングは料理する技術のことを指す言葉である。アジェンダはやるべきことのリストである。タイ接続詞`(バッククオート)は二つの動詞つ…

APL/J言語:ランク

名詞のシェイプ(形)、タリー(要素数)、ランク(次元)について解説します。シェイプは$(ドルマーク、シェイプ)、タリーは#(シャープ、タリー),ランクは#@$(シャープアトドルマーク)を名詞に作用させることにより得られます。以下の例はレポートという2年間の3…

APL/J言語:非明示的(タシット)定義

動詞は明示的にも非明示的にも定義できます。一行で書けるような明示的定義は単項動詞であれ二項動詞であれ、副詞13 :(じゅうさんコロン)を用いて定義できます。下記の例を実行する前に9!:3 ] 2 5を実行し、動詞の表示をボックスとリニアの両方で見れるよう…

APL/J言語:フレットとスクリプト

ホストコンピュータシステムは普通ラインフィード、またはキャリッジリターンの文字、J言語の表現では10{a.(a.は0〜255の文字、その内10番目の文字)または13{a.(または両方)を行区切りのフレットとして使います。フレットが0個または0個以上ある文字列のこ…

制御構造

APL/J言語に限らずというかほかの言語の方がちゃんとしているのかもしれませんが、if〜then〜elseとか、whileとか、ifとかは制御構造(Control Structures)と呼ばれます。なぜ制御構造(コントロールストラクチャー)なのかと考えてみると手続き型言語では流れ(…

APL/J言語:明示的定義

単語構成のところで例に出てきた文は動詞の明示的定義で使われる接続詞:(コロン)と一緒に使うことができる。 m=: '3 %: y' d=: 'x %: y' script=: 0 : 0 3 %: y : x %: y ) roots=: 3 : script roots 27 4096 3 16 4 roots 27 4096 2.27951 8 解説:通常は改…

APL/J言語:名前と表示

いままでのところで使われた通常の名前以外にさらに3クラスの名前があります。 1) $:(ドルコロン)は自己参照に用いられ、名前をつけないで帰納的に動詞を定義することを可能にしている。22章を参照。 2) xとyという名前が明示的定義では使われる。詳細は18章…

APL/J言語:単語構成

英語の解釈は文を単語に分解するところから始まります。最初はスペースで区切られた部分がベースとなるのですが、アポストロフィや句読点によって、事態は複雑になります。「was」と「Brown and Ross’」はそれぞれ一つの単位ですが、「however,」は違います…

APL/J言語:副詞の定義

動詞や名詞と同様副詞も定義できます。 a=:1 2 3 4 5 prefix=: \ さらに副詞の定義は/(スラッシュ)や\(バックスラッシュ、円マーク)のような副詞だけからではなく、接続詞と接続詞の引数を含んだ形で定義できます。 IP=: /\ NB. Insert Prefix + IP a 1 3 6 …

APL/J言語:パーティション

パーティションのところは訳しにくいなぁ。部屋の仕切りのことをパーティションといいますが、リストの区切りと言いたいのかなぁ。副詞\(バックスラッシュ、円マーク)のことです。概念としては簡単で、たとえばsum=: +/を全体にかける際に、初めは初めの1つ…

APL/J言語:”:(くオートコロン、フォーマット)

数字のテーブルはフォーマットすると見やすくなります。 ]t=:(i.4 5)%3 0 0.333333 0.666667 1 1.33333 1.66667 2 2.33333 2.66667 3 3.33333 3.66667 4 4.33333 4.66667 5 5.33333 5.66667 6 6.33333 ]f=: 6j2 ": t 0.00 0.33 0.67 1.00 1.33 1.67 2.00 2.3…

APL/J言語:読み書き

知っている言語に翻訳したり、知っている言語から新しい言語に翻訳したりするのは初歩にはとてもよい練習になります。以下に例を示します。書かれていることを見ずにJ言語の作用を自分の言語で簡潔に定義してみましょう。その際、積極的にコンピュータのディ…

APL/J言語:パワー(繰り返し)とインバース(逆関数)

^:(キャレットコロン、パワー、繰り返し)接続詞の機能は^(キャレット、べき乗)関数と似ていると言えます。左側の動詞を右側の引数回数繰り返します。 ]a=: 10^ b=: i.5 1 10 100 1000 10000 b 0 1 2 3 4 %:a 1 3.16228 10 31.6228 100 %: %: a 1 1.77828 3.1…