APL/J言語 の検索結果:

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

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

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

APL/J言語:関数テーブル 小学校で足し算の振る舞いについて習うときに一覧表が役に立つように、その他の動詞(関数)の振る舞いについて、一覧表を作成することで意味が明解になります。次ページから何ページかで関数テーブルの作り方と、ユーティリティ関数のoverとbyの使い方を説明します。overとbyは引数との境を示して解釈しやすくします。以下のテーブルを観察し、その他の関数( (+/~ ; */~) 0 1 2 NB.足し算と掛け算テーブル +-----+-----+ |0 1…

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 125 2…

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|65 66 67 68 69…

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 =: 3 1 4 2' 3 1 4 2 abc 3 1 4 2

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

APL/J言語:サンプル・トピック これからのパートではさまざまなトピックでJ言語の例を示している。ディクショナリーと実際にJ言語のシステムを動かすことを前提に書かれている。また、帰納的に使われることを想定している。すなわち、 1.文を読み、左側のマージンに書かれている結果を読む。そしてその意味を自分で表現して見る。 2.その上で、似通った文を自分で入力し、結果を見る。 3.Jディクショナリーによって、たとえばi.(アイドット)のような原始動詞の意味を単項動詞の場合、二項動詞…

APL/J言語:二次的動詞

…書きかけです。 - APL/J言語:二次的動詞 J言語が提供する原始動詞(プリミティブまたはプライマリー)を補強するものとして、二次的動詞(セカンダリー)というものをわかりやすい名称で提供すると便利だろう。下記の例では名称の最初は大文字にしている。 Ad=: [ 0:}-@>:@$@]{.] NB.Append diagonal scalar Ai=: >:@i. NB.Augmented integers Area=: [: Det ] ,. %@!@#"1 NB.Area…

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

…書きかけです。 - APL/J言語:アイデンティティ関数とニュートラル 単項動詞の0&+と1&*はアイデンティティ関数と呼ばれます。ここで0と1はそれぞれ二項動詞+と*のアイデンティティ要素、またはニュートラルと呼ばれます。空のリストに挿入すると挿入された二項動詞のニュートラルが返されます。例を示します。 +/ i.0 0 +/'' 0 +/0{. 2 3 5 0 */i.0 1 */'' 1 */0{. 2 3 5 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 15 f x+y 8 4 30 20 14 (f x),:(f y) 2 0 8 6 4 6 4 22 14 10 (f x)+(…

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

APL/J言語:C.(ラージシードット、サイクル) pがi.nの要素からなる順列ならば,pはn次の順列ベクトルと呼ばれる。 n=#b(bの要素数がn)ならば、p{bはbの要素の順列である。C.pはボックス化されたi.#pの要素からなる表を返す。この表はpの順列の標準サイクル表現と呼ばれるものである。p=:4 5 2 1 0 3とするならば、C.pは(,2);4 0;5 3 1である。この意味は2の位置にあるものは2のまま、0が4,4が0に移動する。また3が5、1が3、5が1に…

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

APL/J言語:$.(ドルドット、スパース)$.yは密配列を疎配列(スパースアレイ)にする。逆に$.^:_1 yは疎配列を密配列にする。任意の関数fについて同一性の式f -: f&.$.とf -: f&.($.^:_1)が成立する。例外としては{.(左波かっこドット、左ブレイスドット、オーバーテイク)のようにフィルとして疎配列を使う関数などが考えられる。0$.yは状況に応じて$.もしくは$.^:_1として作用する。つまり、yが密配列ならば疎配列に、疎配列ならば密配列に変換する…

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

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

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&{(左波かっこ、左ブレイス)は同じ結果を返します。しかし、サイクル関数C.(ラージシードット)はこれ以外の場合は{(左波かっこ、左ブレイス)とはまったく違います。特に…

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

プロセスの繰り返しや、一連の似たようなプロセスの連なりのことをイテレーションと呼びます。イテレーションの多くは非明示的です。たとえば*/bやa*/b、a*bなどです。(訳注:bがリストの場合、それぞれにかかる) 明示的イテレーションはパワー接続詞の^:(キャレットコロン、パワー、繰り返し)や、アジェンダの@.(アトマークドット)、自己参照、および制御構造が使われます。 (cos=: 2&o.) ^: (i.6) b=: 1 1 0.540302 0.857553 0.6542…

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. i.3 => 0 1 2 3 4 5 A. 0 1 2となる tap 3 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 この…

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

J言語には階乗については!(エクスクラメーションマーク)という専用の動詞が用意されていますが、階乗は普通nの階乗はn-1の階乗にnを掛けたもの、というような定義をします。なお0の階乗は1です。このような定義の仕方は定義される関数が定義の中に出てくるので再帰的(リカーシブ)と呼ばれます。 ケース文がリカーシブな定義に使われます。ケースはある条件下ではある関数を選び、終了条件になったときに別の関数が選ばれます。 factorial=: 1:`(]*factorial@<:) @.…

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

動名詞(gerund)と式次第(アジェンダ) 英語では、動名詞ジェランドとは動詞の力を保持した名詞のことである。たとえばクッキングは料理する技術のことを指す言葉である。アジェンダはやるべきことのリストである。タイ接続詞`(バッククオート)は二つの動詞つないで動名詞を作り、そこから実行すべき要素が取り出されます。アジェンダ接続詞@.(アトマークドット)は動名詞に作用し、右側の動詞引数の結果が要素を決定します。 g=: +`^ a=: 2^3 => 8となる 8 3 g@.a 2…

APL/J言語:ランク

名詞のシェイプ(形)、タリー(要素数)、ランク(次元)について解説します。シェイプは$(ドルマーク、シェイプ)、タリーは#(シャープ、タリー),ランクは#@$(シャープアトドルマーク)を名詞に作用させることにより得られます。以下の例はレポートという2年間の3ヵ月ごとの四半期のデータをについて作られています。 ]report=: i. 2 4 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ($ ;…

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

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

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

ホストコンピュータシステムは普通ラインフィード、またはキャリッジリターンの文字、J言語の表現では10{a.(a.は0〜255の文字、その内10番目の文字)または13{a.(または両方)を行区切りのフレットとして使います。フレットが0個または0個以上ある文字列のことをスクリプトと呼びます。付録のAで詳しく述べられていますが、スクリプトはファイルに保存したり、ファイルから取り出したりできます。そのときの命令の形はt 1!:2 スクリプトの便利な入力方法に: 0 : 0というフレー…

制御構造

APL/J言語に限らずというかほかの言語の方がちゃんとしているのかもしれませんが、if〜then〜elseとか、whileとか、ifとかは制御構造(Control Structures)と呼ばれます。なぜ制御構造(コントロールストラクチャー)なのかと考えてみると手続き型言語では流れ(フロー)があってその流れをねじ曲げたり、戻したり、飛ばしたりコントロールするからだと思ういます。APL/J言語では流れというイメージよりも全体を俯瞰して全体になにかを作用させる風に頭を使いますので…

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 解説:通常は改行(Enter)で文が実行されますが、名前の定義時にはそれでは困ります。script=: 0 : 0というのはそれ…

APL/J言語:名前と表示

いままでのところで使われた通常の名前以外にさらに3クラスの名前があります。 1) $:(ドルコロン)は自己参照に用いられ、名前をつけないで帰納的に動詞を定義することを可能にしている。22章を参照。 2) xとyという名前が明示的定義では使われる。詳細は18章にあるが、明示的定義においてx、yは引数を表します。 3) 名前の末尾にアンダーバーを二つもつ名前(ab_cd_のような名前)はロケール特有の名前(ローカティブ)である。ロケールFでの名称はロケールGから参照する場合末尾に…

APL/J言語:単語構成

英語の解釈は文を単語に分解するところから始まります。最初はスペースで区切られた部分がベースとなるのですが、アポストロフィや句読点によって、事態は複雑になります。「was」と「Brown and Ross’」はそれぞれ一つの単位ですが、「however,」は違います。なぜならカンマはそれ自体で一つの単位だからです。次に示す文字列はJ言語での文にあたり、実行の意味の関数".(クオートドット)で実行できます。 m=: '3 %: y' NB.x %: yはyのx乗根 d=: 'x …

APL/J言語:副詞の定義

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

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

パーティションのところは訳しにくいなぁ。部屋の仕切りのことをパーティションといいますが、リストの区切りと言いたいのかなぁ。副詞\(バックスラッシュ、円マーク)のことです。概念としては簡単で、たとえばsum=: +/を全体にかける際に、初めは初めの1つ、次に2つ、3つと順番にやっていって、最後に全部にかけた数字(この場合はリストの合計)を算出する。結果はもとのリストと要素数が同じリストになります。英語での説明はこんな感じです。関数sum=: +/はリスト全体に作用する。部分の合…

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.33 2.67 3.00 3.33 3.67 4.00 …

APL/J言語:読み書き

知っている言語に翻訳したり、知っている言語から新しい言語に翻訳したりするのは初歩にはとてもよい練習になります。以下に例を示します。書かれていることを見ずにJ言語の作用を自分の言語で簡潔に定義してみましょう。その際、積極的にコンピュータのディクショナリーを使ったり、試行錯誤をしましょう。 f1=: :&2 NB. 2から9の間にあるかどうか(2と9を含む) f4=: f3 *. f5=: f3 +. g1=: %&1.8 NB. 1.8で割った商 g2=: g1^:_1 NB.…

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.16228 5.62341 10 %: ^: 2 a 1 1.77828 3.16228 5.62341 10 %: ^: 3 a 1 …

APL/J言語:ハウスキーピング(身の回りの整理)

長いセッションの場合動詞や名詞にアサインした名前を覚えるのが難しくなる場合があります。外部接続詞!:(エクスクラメーションマークコロン)を使って名前を表示したり消去したりできます。 b=: 3* a=: i. 6 sum=: +/ tri=: sum\ a names=: 4!:1 names 0 +-+-+---+ |a|b|tri| +-+-+---+ names 3 +-----+---+ |names|sum| +-----+---+ erase=: 4!:55 er…