APL/J言語

FizzBuzz完成品

わたしとしての完成品を書いておきます。 ボックスから出す必要はないと思うのでその分短くなっています。 結果の表現は10 x 10の表にします。 Windows版のJ602での結果です。 - FizzBuzz=: 3 : 0 (FizzBuzz') (:i.y ) 10 10$FizzBuzz 100 +----+----+----+-…

APL/J言語でFizzBuzz(つづき)

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) } …

E.(メンバーオブ)

J言語にE.(メンバーオブ)という動詞があって、配列の中の配列の位置を返します。0なら「なし」で、1が有り。なぜ大文字のE.(大文字イードット)かと言うと、数学の記号の∈(含む含まれる)というのに似ているからでしょうか。 'co' E. 'cocoa' 1 0 1 0 0 という…

FizzBuzz問題の解説と感想

昨日の記事でJ言語でFizzBuzzをやりました。はっきり言って難しかった。配列で考えること自体は慣れの問題だと思うのですが、ボックスがやっかい。じつはずいぶん試行錯誤をしました。 1;2;'Fizz';4;'Buzz';6;7 +-+-+----+-+----+-+-+ |1|2|Fizz|4|Buzz|6|7|…

APL/J言語でFizzBuzz

FizzBuzz問題というのがあって、1から100までの数字で3で割り切れる場合は'Fizz'、5で割り切れる場合は'Buzz',15で割り切れる場合は'FizzBuzz'、その他はそのままの数字をアウトプットせよ、というのだったと思う。APLやJ言語で解いた例もないわけではないの…

移動平均

移動平均とはたとえば月次データが何年分か溜まった後に大きな傾向を見るために6か月平均とか12か月平均とかを1月から12月、2月から翌年1月、というように対象期間を移動させながら計算していくものです。年度合計の比較でいいじゃないか、と思いがちですが…

|.(たてぼうドット)

APLでは丸にたてぼうやよこぼうの配列を逆順にしたり(reverse)、回転したり(rotate)、シフトしたり(shift)する動詞(関数)があります。 これがJ言語では|.(たてぼうドット、パイプラインドット)の役割です。また、前回紹介した"(クオート、ランクコンジャンク…

,(カンマ)

APLでもJ言語でもデータを結びつけるのは,(カンマ)という動詞(関数)です。配列を連結するにはいろんなレベルの連結が考えられますが、J言語では"(クオート、ランクコンジャンクション、ランク接続詞)を使うことにより、若干わかりやすくなっています。 'abc'…

円関数

下の表現わかりますか? J言語です。 1 o.o.%3 0.866025 2 o.o.%3 0.5 o.1は3.14159ですなわち(パイ)です。 %3は1÷3の意味ですなわち0.333333です。 ということはo.%3はです。 一方、1 o.はsin(サイン)、2 o.はcos(コサイン)ですので、上記の結果になります…

対数

2の3乗というときふつうの言語では2^3というように^(キャレット、べき乗)を使います。J言語でも^(キャレット)です。APLではこれが★(アスタリスク)で2★3のように書きます。さて、J言語の^(キャレット)を単項動詞として使うとどうなるか。 ^1 2.71828 どこかで…

関数の定義

西川利男の本でAPLのユーザ定義関数作成の例がありました。 ▽TEST1 X 'TOTAL:' +/x 'AVERAGE:' (+/X)÷(ρX) ▽ これをこのままではJ言語では動きませんでした。とりあえず動くものを作ったのが下記のリストです。 test1 =: 3 : 0 2 2 $ 'total'; (+/y) ; 'aver…

連立方程式

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です。これでは解説になってませんね。この逆行列を求める動…

成績計算

西川利男の本からですが、生徒ごとの平均点、教科ごとの平均点、総平均点を求めます。 +-+------------------+ | |国 数 英 理| +-+------------------+ |A|72 68 80 71 | |B|65 57 75 62 | |C|63 48 78 68 | |D|80 62 73 65 | |E|58 66 72 70 | |F|90 88 80…

APL/J言語で標準偏差

以前TOEICを受験したことがありまして、なんと975点という高得点でした。で975点がどんな点かというと、受験した第138回の発表によると、平均586.1点、標準偏差が171.8点とある。平均と標準偏差を与えられると、偏差値が計算できて、「計算式: 偏差値 = (10…

APL IS HAPPY

西川さんの本の3ページ目に ******************************* * * * APL IS HAPPY APL IS HAPPY A * * PL IS HAPPY APL IS HAPPY AP * * L IS HAPPY APL IS HAPPY APL * * IS HAPPY APL IS HAPPY APL * * IS HAPPY APL IS HAPPY APL I * * S HAPPY APL IS HA…

絶対値

APLの入門書を読んでいたら絶対値の話があってxの絶対値というときに、|x|とは書かず、|xと書くというような説明がありました。そう言えば、J Primerで絶対値Absoluteという話はなかったなぁ、と見てみたら、|(たてぼう)はMagnitudeマグニチュードという名称…

日本語の本

アマゾンでしらべたら、下記の2冊が新品で手に入ります。基礎からのAPL―解説と例題例解 西川 利男 初めて学ぶAPL (情報処理入門シリーズ) 橘川 孚、宮崎 正俊、 宇土 正浩ほんとはJ言語の本も欲しいのですが、電子データが充実してしまうとかえって入門書が…

APL記号の表示について

APL記号は現在ではユニコードで書けるのでIMEに登録して、ブログの記事にできるのですが、どうもFirefoxでは表示できるようですが、IEではダメなようです。とても残念。APLに興味を持つような人はIE使ってはいないとは思うものの、わたしも会社のマシンから…

APL/J言語比較入門

わたしはJ言語はAPLの正統な後継言語でJ言語で十分だという主義ですが、歴史もあるし過去の栄光もあるのでAPLの文献を読む必要があったり、読みたかったりする人も多いと思います。というわけで、APLを読みながらJ言語を勉強できるような工夫を考え中。 基本…

APL記号MS-IME用リスト

昨日の続きですが、環境によって見え方が違うようです。研究中。 - APL記号を入れやすいように、IMEに登録ようのリストを作ってみました。これで、 life ← {↑1 ω∨.^3 4=+/,∼1 0 1∘.Θ∼1 0 1∘.⌽⊂⍵} のような式も自由自在です。 - "くわっど" "⎕" "記号" "しか…

APL記号とユニコード

下記の記事を書きましたが、環境によってちゃんと見えないようです。研究中。 - 以前は入力もままならなかったAPL記号ですがいまではユニコードにすべて含まれている、という言い方はよく耳にするのですが、見かけが同じでどのコードのものを使うのがルール…

APL/J言語でシステムタイプ

+ 9!:12'' 5 + という不思議なマークをネットで見かけました。そう言えばJ言語のヘルプを開くとのメニューの右から4つ目に!:(びっくりマークコロン、エクスクラメーションマークコロン)があります。そこを開いてみると、!:(びっくりマークコロン)はForeign C…

APL/J言語でトランプ

Easy JというJ言語の本(onlineです、無料)を読んでいたら15ページ目にトランプの手を計算している例が載っていました。ちょっとおもしろかったのでご紹介。52枚から13枚をランダムに選んだ手を作るだけです。トランプは1から13で、ダイヤ、クラブ、ハート、…

APL/J言語での素数

数日前にJ言語では素因数分解がすごくカンタンという話を書きました。 q:978187098701 5573 175522537 q:123456789 3 3 3607 3803 つまりq:(キューコロン)という単項動詞を使います。 ところで、素数を発生させる動詞もあるだろうと探したらp:(ピーコロン)と…

APL/J言語でのランダム

J言語でランダムな数値を得るには、?(はてな)を使います。 ?10 8 二項動詞として?(はてな)を使うと、ランダムに重複なくピックアップしてくれて便利です。 4?10 1 9 5 8 10?10 3 4 5 2 7 1 0 6 9 8 さて、ということは?(はてな)の左辺は右辺の数字を超えない…

Iverson自身のドキュメント

APLとJ言語を作ったIversonは数学者で論文もたくさん書いているので簡単に彼自身の文章が読めるかと思うとなかなかみつからなかったり、あまり関係ない論文だったりします。 http://burks.bton.ac.uk/burks/language/apl/camnweb/camn.htm というところに、 …

APL/J言語における三角関数

えっと、まだぜんぜんわかっていないのでほんとに今知っていることの備忘です。円周率(パイ)は1p1(いちピーいち)もしくはo.1(オードットいち)であらわされます。1p1は1p2にすると1かけるパイの自乗です。 1p1 3.14159 o.1 3.14159 つぎに、オードット(o.)の…

APL/J言語の勉強方法

J言語自体は http://www.jsoftware.com/ からダウンロードしてインストール、実行すればJ言語の環境がスタートする。 上記のサイトからでもJ言語環境のヘルプからでも同じ膨大なドキュメント類にいけるのですが、J言語環境のヘルプからいくとダウンロードさ…

ANDとOR

J言語のandはアステリスクピリオド(*.)でorはプラスピリオド(+.)です。 これは相当覚えにくい。 1 1 1 0 0 *. 0 1 1 1 0 0 1 1 0 0 1 1 1 0 0 +. 0 1 1 1 0 1 1 1 1 0 解説:J言語はたいていの演算子や関数はリストや行列にも使えます。この例ではリストのそ…

有効桁数

有効数字とか有効桁数とか実はよくわかってないのですが、Jでは1割る3(1%3)とすると、0.333333と表示されます。 まず、これは表示桁数であって、変更できます。 1 % 3 0.333333 (9!:11) 20 1 % 3 0.33333333333333331 解説:Jでは割り算は普通のプログラム言…