APL/J言語 の検索結果:
最近、J言語に夢中で、J言語についてばかり書いていますが、これでは日記の意味がなくなりつつあるので、ちょっと工夫です。 はてなは過去日付で書けますので、今後2001年2月あたりにまとめて書くようにします。 APLやJ言語は数学に近くて、概念をどのように説明するかとか、練習問題についてあれこれ考えるとかをそこでやりたいと思います。 よろしくお願いします。
J言語でFizzBuzz(http://recompile.net/2007/05/jfizzbuzz.html)というところに、satzeさんが - 例えばこんなのどうでしょうか? ' ' (('|' E. B) # i.#B) } B=.}.}:1{":(FizzBuzz') (:i.100 (1行)もしくは, FizzBuzz=: 3 : 0 ' ' (('|' E. B) # i.#B) } B=.}.}:1{":(FizzBuzz') (:i.y. ) として, F…
FizzBuzz問題というのがあって、1から100までの数字で3で割り切れる場合は'Fizz'、5で割り切れる場合は'Buzz',15で割り切れる場合は'FizzBuzz'、その他はそのままの数字をアウトプットせよ、というのだったと思う。APLやJ言語で解いた例もないわけではないのですが、それを読む前に今の知識と道具でチャレンジしてみました。 Jでやろうと思うのですが、ひとつずつ処理していくというのがJ言語らしくないので、配列で考えなければいけない。あと数字と文字列を配列の中…
APL/J言語で単純な連立方程式を解く場合は、%.(パーセントドット、Matrix divide, Matrix inverse)を使います。 2x + 3y = 3 4x - 2y = 14 a 2 3 4 _2 b 3 14 b %. a 3 _1 というわけでxは3、yは-1です。これでは解説になってませんね。この逆行列を求める動詞%.(パーセントドット)はAPLでは⌹(四角の中に÷がある記号、ドミノと呼ばれる)を使います。これは母か田で代用できないことはないな。漢字や…
…は自慢話です。さて、APL/J言語で配列の個数とか平均とか、標準偏差を計算する話です。勉強しながらなので、行ったり来たりしますが、そこはご容赦下さい。 まず、適当な得点の配列を考えます。 a =: 200 300 400 500 600 700 438 580 550 800 なんとなくTOEICの点数ふうですね。これだと平均が600百点あたりかな、偏差は150点あたりかな、とメドをつけます。 #a 10 #(シャープ)は単項動詞(引数を右側だけとる場合)としては配列の個数を…
…tudeマグニチュードという名称になっている。ひょっとすると複素数に拡大したときに概念が変わっているのかもしれません。 |3 3 |_3 3 |3j4 5 dyad(2項動詞)としての|(たてぼう)は、yをxで割ったあまりです。後ろの引数に前の引数を作用させるのはAPL/J言語ではあたりまえですが、気持ちの悪いひともいるようで、その場合は下記のように動詞を定義して、後ろ前逆に書けるようにします。 4|3 3 3|7 1 7(|~)3 1 mod =: |~ 7 mod 3 1
わたしはJ言語はAPLの正統な後継言語でJ言語で十分だという主義ですが、歴史もあるし過去の栄光もあるのでAPLの文献を読む必要があったり、読みたかったりする人も多いと思います。というわけで、APLを読みながらJ言語を勉強できるような工夫を考え中。 基本 1+1 2 は同じなのですが、 1000000*10000 1e10 は違いますね。APLではx(かける,times)で掛け算ですが、J言語では*(アスタリスク)です。J言語にはx(エックス)は別途用途があって、自然対数の値で…
+ 9!:12'' 5 + という不思議なマークをネットで見かけました。そう言えばJ言語のヘルプを開くとのメニューの右から4つ目に!:(びっくりマークコロン、エクスクラメーションマークコロン)があります。そこを開いてみると、!:(びっくりマークコロン)はForeign Conjunction(外部接続詞)とのことで、さらに以下の分類がありました。 0!: Scripts 1!: Files 2!: Host 3!: Conversions 4!: Names 5!: Repr…
Easy JというJ言語の本(onlineです、無料)を読んでいたら15ページ目にトランプの手を計算している例が載っていました。ちょっとおもしろかったのでご紹介。52枚から13枚をランダムに選んだ手を作るだけです。トランプは1から13で、ダイヤ、クラブ、ハート、スペードとします。n種類のものからm個重複なしに選ぶ方法はm?nですので、今回13枚をとりますので13?52です。それをhandという変数に入れますが、入れると同時に表示させるために頭に+をつけます。 +hand=.1…
数日前にJ言語では素因数分解がすごくカンタンという話を書きました。 q:978187098701 5573 175522537 q:123456789 3 3 3607 3803 つまりq:(キューコロン)という単項動詞を使います。 ところで、素数を発生させる動詞もあるだろうと探したらp:(ピーコロン)というのがありました。これが不思議で素数に連番が振ってあるらしく、数字を与えるとその番号の素数を返します。 p:0 2 p:10 31 p:907987 13965059 p:…
J言語でランダムな数値を得るには、?(はてな)を使います。 ?10 8 二項動詞として?(はてな)を使うと、ランダムに重複なくピックアップしてくれて便利です。 4?10 1 9 5 8 10?10 3 4 5 2 7 1 0 6 9 8 さて、ということは?(はてな)の左辺は右辺の数字を超えないということです。 11?10 domain error さいころを6回転がす、というような場合は重複を許しますので、?6を単純に6回行います。 ?6 6 6 6 6 6 2 4 5 0…
えっと、まだぜんぜんわかっていないのでほんとに今知っていることの備忘です。円周率(パイ)は1p1(いちピーいち)もしくはo.1(オードットいち)であらわされます。1p1は1p2にすると1かけるパイの自乗です。 1p1 3.14159 o.1 3.14159 つぎに、オードット(o.)の前に数字をおいて、後ろに数字をおくとサインコサインが計算されます。1がサインで、2がコサイン。/(スラッシュ)という副詞をおくと、配列のそれぞれに動詞が適用されますので、サインカーブを書くことが…
…いいかもしれない。 APL/J言語はハマる人とハマらない人がいて、数学的センスのせいもあると思う。ただ、どの言語にも言えることですが、最初の入門書がフィットするかどうかというのもあると思う。 J Primer Learning J J for C programmers Easy J あたりが読み物で、あとDictionaryとかVocabularyとかも適宜参照する。上記サイトではJ Primerから入るのを推奨していて、わたしも結局それがいいと思いますが、すこし固いので、…
…みました。いろんなページがある中で、「1125886485051743が33553991×33554473であることを発見するのは容易ではありません」と書いてあったので、ためしに手元のマシンで走らせたところ、若干時間がかかったけど、 D:>ruby factor.rb {33554473=>1, 33553991=>1} と、素因数分解できたので、満足。 追記:APL/J言語でやってみたら一瞬でした。 q: 1125886485051743 33553991 33554473
APL/J言語:ディクショナリーの定義の読み方 ディクショナリーの項目の最初の行には行頭に単項動詞としての呼称、行末に二項動詞としての呼称が書いてあります。中央に正式な名前がありますが、正式な名前はアルファベット以外のキャラクター一文字だけのものと、それにピリオドやコロンがついているものとがあります。接続詞(conjunction)の場合、正式な名前の前にmとかuとか書いてあり、これはmが名詞、uが動詞の意味です。正式の名前のあとにnとかvとか書いてあるのも同様です。副詞の場…
APL/J言語:エラーとサスペンション文の実行はエラーが起きると中止(サスペンド)します。エラーメッセージとコンテキスト情報が画面に出力されます。4つのブランクが構文解析が停止した場所を示します。以下に例を示しますが、サスペンションが起きるのは直接実行時だけでなく、スクリプトファイルの実行時、ユーザーが定義した動詞、副詞、接続詞の実行時にも起きます。直接実行 2+'a' domain error 2 +'a' スクリプトファイルの実行 t=: '2*3',(10{a.),'2…
APL/J言語:ロケール特有の名前(ローカティブ) ローカティブabc_f_と書いた場合、ロケールfのabcのことを指します。間接ローカティブabc__xyと書いた場合、変数xyの値が名称のロケールでのabcのことを指します。旧バージョンとの連続性(コンパティビリティ)のために、非標準的な表記abc__はabc_base_として受け入れられます。 b=: 1 Rome=: 2 Rome_NewYork_=: 20 f_NewYork_=: 3 : '3*b=: Rome+y'…
APL/J言語:フレットとスクリプトホストシステムでは通常ラインフィードやキャリッジリターンキャラクターである10{a.(アスキー文字全体の中の10番目)や13{a.(同じく13番目)、またはその両方が行の切れ目のしるし(フレット)としてよく使われます。そういった行の切れ目を0個以上含む文字列のリストのことをスクリプトと呼びます。 付録(Appendix)Aで述べられているように、スクリプトtはファイルとして保存したり、再使用したり出来ます。方法はt 1!:2 フレーズ0 :…
APL/J言語:拡張整数と有理数の計算拡張整数(有効桁数を拡張したもの)は少数点を含む数字の最後にxを付すことによって入力できます。単項動詞x:を整数に作用することでも拡張整数を生成できます。たとえば、2つの要素からなるベクトル1234x 56x (または1234 56x)はx: 1234 56と同値です。もし引数が拡張整数なら多くの原始動詞は結果として拡張整数を生成しますが、ある種の動詞は引数が拡張整数でも結果は(正しくない)浮動少数となります。なぜなら計算結果は積分ではな…
APL/J言語:動詞の連続(トレイン)(+ */)のような特殊な連続(シークエンス)は、"通常"の構文解析ルールでは部分部分に分けることができません。このようなものはトレインと呼ばれ以下のように解釈されます。 2つもしくは3つの動詞の連続(トレイン)は動詞です。また、解釈を重ねることによりさらに大きな数の動詞の連続(トレイン)による動詞が作成できます。たとえば、+-*%や+-*%^は、(-*%)や+ (*%^)と同等です。連続(トレイン)による動詞の生成方法は下記のダイヤグラ…
APL/J言語:構文解析(パーシング)と実行文(センテンス)は言語の構文解析ルールに従ってフレーズを順々に実行することにより評価されます。たとえば文10%3+2は、最初にフレーズ3+2が評価され、その結果が10を割るのに使われます。1.実行は右から左に進みます。右かっこがあれば、対応する左かっこによって囲まれたセグメントが評価され、その結果がセグメント全体と囲んでいる両かっこを置き換えます。 2.副詞と接続詞(conjunction)は動詞より先に実行されます。フレーズ,"2…
APL/J言語:比較演算子(comparative)x、yが有限の浮動小数もしくは複素数の場合、x=yは日常の同等比較と同じような働きをします。(つまりある程度の比較上の許容度を認めたうえで同じとみなします。) 結果はx-yの差が比較的ゼロに近いならば1(真)です。許容度比較は他の関係子やフロア、シーリング(.)においても同様な概念です。厳密な定義はパートIIIの=(イコール)の項で説明されています。許容度tを自分で設定することも可能で、フィット接続詞!.(エクスクラメーショ…
APL/J言語:副詞(adverb)と接続詞(conjunction) 動詞(verb)と違い、副詞と接続詞は単項、二項の両方の意味を持つということはありません。副詞は動詞の後ろに付いて動詞の動きを変化させますので、左側の引数だけという意味で常に単項(monadic)です。接続詞は常に二項(dyadic)です。 接続詞と副詞は名詞もしくは動詞に作用します。接続詞は4つの違うクラスに属する結果を生成します。 例えば、u&vは動詞uと動詞vの組合せを生成します。また、^&2は右引…
APL/J言語:名詞(noun) 名詞(noun)は3つの違ったやりかたで分類されます。 1.数字(ニューメリック)、リテラル、シンボル 2.オープンまたはボックス 3.いろんな次元(ランク)での配列 配列の要素となるアトムはひとつのクラス(数字、リテラル、シンボル、ボックス)に属します。配列で次元(ランク)が0、1、2のものはそれぞれアトム、リスト、テーブルと呼ばれます。また、数学ではスカラー、ベクトル、マトリックスと呼ばれます。同じものです。数字とリテラルはパートIで説明…
APL/J言語:文法 (cf.20010329) 次の例はJ言語における文の6つの部分(名詞、動詞、副詞、接続詞、連結詞、句読点)をわかりやすく示しています。The following sentences illustrate the six parts of speech: fahrenheit =: 50 (fahrenheit - 32) * 5%9 10 prices =: 3 1 4 2 orders =: 2 0 2 1 orders * prices 6 0 8…
APL/J言語:アルファベットと単語 J言語で用いられるアルファベットは標準アスキー文字であり、数字と英語のアルファベットとアンダーライン(名前と数字に用いられる)と、クオート(シングルクオート)とグラフィックと呼ばれるその他(スペースを含む)からなる。数字は0-9の数字とアンダーバー(数字の前につけて負の数字を表すのと、単独で用いて無限と、二つならべてマイナスの無限を表す)、ピリオド(数字と数字の間において、小数点を表す)、小文字のe(2.4e3の場合2400を表すように指…
APL/J言語:ディクショナリー J言語は形式型命令型プログラミング言語(formal imperative language)であるAPLの方言です。命令型プログラミング言語なので、J言語の文はインストラクションとも呼ばれ、結果を生じるために実行することができます。形式言語(formal language)で明白であるので、コンピューターで機械的に実行することができます。したがって、プログラム言語と呼ばれます。数学表記(mathematical notation)の分析的性…
APL/J言語:!.(エクスクラメーションドット、フィット接続詞) 接続詞!.(エクスクラメーションドット、フィット、カスタマイズ)はある種の動詞について、定義された形で動詞の動きを変化させます。たとえば、=!.tは=(イコール)のトレランスをtに変更します。^!.rは階乗関数x ^!.r n is */x + r * i. nとなります。したがって、^!._1は降順の階乗関数になります。 フィットは以下の動詞にの変化形を作るのに適用されます。単項動詞の場合と二項動詞の場合の…
APL/J言語:多項式(ストープ、階段法) 表現式*/ x + s * i. nはしばしば階乗関数(factorial function)と呼ばれますが、!(エクスクラメーションマーク、階乗)という原始関数との混乱を避けるためにストープ(階段式採掘法)と呼びます。この定義における要素はステップのサイズsによって変化します。炭鉱におけるストープ(階段式採掘法)でも同様です。ストープは保険数理計算や微分計算においいて便利です。ストープは^(キャレット、累乗、パワー)の変形でもあり…
APL/J言語:多項式(カーナー法による係数のルート) カーナー法(Kerner's Method)という名前ではウィキペディアにはありませんが、「求根アルゴリズム」というページに若干の記述がありました。 - ニュートン法は一度に一つのルートを対象とし、最初の近似が近いところにある必要があります。カーナー法では、すべてのルートを求める一般的な方法であり、リストから始め、残るf aの要素を対応するルートについての微分係数で割っていきます。この方法は最高次の多項式係数が1のものに…