このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

JavaScript

なんか使える?

<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=shift_jis'> <title>ShowCatyScript</title> <script> function showCatyScript() { var caty = document.getElementById("caty"); var text = caty.innerHTML; text = text.replace("", ""); aler…</meta></head></html>

スタイルプロパティとかナニヤラとか

スタイルシートの設定より、JavaScriptで someElm.style.someProperty = someValue; とやったほうが効く。まー、あたりまえと言えるが、良かったー。これで、スタイルシートでの邪魔な指定をプログラム側でオーバライドできる。コンテントエリア、パディング…

継承方式と見やすさ

hacker's /* test-inher-3-hacker.js */ // コンストラクタ var Point = function (x, y) { this.x = x; this.y = y; }; var PointPrototype = function () { this.moveTo = function (x, y) { this.x = x; this.y = y; }; this.toString = function () { re…

秘密を持った点

/* PointWithSecret.js */ var Point = function (x, y, secret_) { this.x = x; this.y = y; var secret = (secret_ || "confidence"); this.getSecret = function() { return secret; }; }; Point.prototype = { moveTo : function (x, y) { this.x = x; t…

親のものを乗っ取ることは、継承とは言わないかもね

/* test-inher-1.js */ // コンストラクタ function Point(x, y) { this.x = x; this.y = y; } Point.prototype.moveTo = function (x, y) { this.x = x; this.y = y; }; Point.prototype.toString = function () { return "(" + this.x + ", " + this.y + "…

タートル・モナド

<html> <head> <title>Turtle Monad</title> <script src="TurtleMonad.js" ></script> <script> var _canvas = null; var _ctx = null; function initCanvas() { _canvas = document.getElementById("canvas"); _ctx = _canvas.getContext('2d'); } </script> <style> #canvas {border: 1px sol…</head></html>

サイクリック・カウンター・モナド

/* CyclicCounterMonad.js */ // オペレーション・モノイド var CounterOp = { // モノイド単位 unit : function() { return 0; }, // モノイド乗法 mult : function(x, y) { return x + y; } }; // カウンター・オブジェクト(シングルトン) var Counter =…

カウンター・モナド

<html> <head> <title>Counter Monad</title> <script src="CounterMonad.js" ></script> </head> <body> <h1>Counter Monad</h1> </body> </html> /* CounterMonad.js */ // オペレーション・モノイド var CounterOp = { // 定数 UP : 117, // 'u' = upオペレーション DOWN : 100, // 'd' = downオペレーション // モノイド単位 u…

カウンターモナドの演算表を作る

// モノイド演算(乗法) function mult(x, y) { var r0, r1, r2; r0 = y[x[0]]; r1 = y[x[1]]; r2 = y[x[2]]; return [r0, r1, r2]; } // オペレータの名前 var opName = { "u" : [1, 2, 2], "d" : [0, 0, 1], "U" : [2, 2, 2], "D" : [0, 0, 0], "X" : [0,…

時間がねーから未完成版

// mccircle.js -- Monte Carlo method /* * 座標形はキャンバス中心を原点とする数学方式に * 設定されていることを前提とする。 * * 大域変数canvasにキャンバスが、 * 大域変数ctxにanvasの2Dコンテキストが入っているとする。 */var inner = 0; // 円の…

はじめて触ったよ

/* canvaslib.js *//* * 変数canvasにcanvas要素オブジェクト、 * 変数ctxにキャンバスのグラフィックコンテキスト * が入っていると仮定する。 * */// 指定位置にドット(小さな矩形)を描く function drawDot(x, y) { ctx.fillRect(x, y, 4, 4); }// 2点を…

有向グラフの例を3つ

コードになにか問題があれば、ここに追記します。 /* Graph1.js */ var Graph1 = { }; Graph1.isVertex = function(x) { return (x === 0 || x === 1 || x === 2); }; Graph1.isEdge = function(x) { return false; }; Graph1.eqVertex = function(a, b) { i…

有向グラフから作るパスの圏

コードになにか問題があれば、ここに追記します。 /* PathCat.js */ /* * グラフ(有向グラフ)のインターフェース * * isVertex(x) -- xはグラフの頂点である * isEdge(x) -- xはグラフの辺である * eqVertex(a, b) -- 頂点aと頂点bは等しい * eqEdge(e, f)…

N上の掛け算による遷移の圏

[追記]eqObjが定義されていると仮定できるなら、SomeCat.composable(f, g)(fとgのこの順での結合可能性)は次のように書けますね。 return SomeCat.eqObj(SomeCat.cod(f), SomeCat.dom(g));今度からこう書こう。以前のは直さないけど。[/追記] /* MTNCat.js…

N上の離散圏

[追記]eqObjが定義されていると仮定できるなら、SomeCat.composable(f, g)(fとgのこの順での結合可能性)は次のように書けますね。 return SomeCat.eqObj(SomeCat.cod(f), SomeCat.dom(g));今度からこう書こう。以前のは直さないけど。[/追記] /* DiscCat.j…

変なところ

false == 0 は成立する。 false == undefine は成立しない。 if (undefined) でundefinedはfalseとして評価される。 NaN === NaN は常に成立しない。 "hello" == "hello" は成立する。 [1, 2] == [1, 2] は成立しない。 [1, , 2,,] は長さが3 docuement.writ…

グラデーション(グラディエント)

普通に説明すりゃいいものを、なにも秘技密教じゃあるまいし、もうほんとにバカジャナイノ。ひさびさにイライラした。

有限オーディナルと写像の圏 -- JavaScriptによる実装

/* MapFO.js -- Map Category over Finite Ordinals */// 整数の区間を作る // (一般的にも使えそう) function seq(n, m) { // n, mは整数、n ≦ m と仮定 var a = new Array(); for (var i = 0; i <= (m - n); i++) { a[i] = n + i; } return a; }// 名前…

しりとりの圏 -- JavaScriptによる実装

/* HSCat.js -- Hiragana Shiritori Category *//* * 一般的な文字列処理関数 */// 文字列の連接 function concat(s, t) { // s, t は文字列と仮定 return String.prototype.concat.call(s, t); }// 文字列の最初の文字(ただし文字番号が返る) function fi…

とりあえず行列掛け算

計算できればいい。 /* mat.js *//* * 簡易行列計算(掛け算のみ) * * 行列は入れ子の配列で表す。 * 例:[ [2, 0, 1], [0, 3, -1] ] これは2行3列の行列 * - matMult -- 掛け算 * - matEq -- 等値判定 * - matPrint -- 表示 * それぞれ、m, e, p という短…

DOM操作

HTMLを手で編集してはリロード作業との対比をすれば、以外にDOM操作もわかるみたい。バッドノウハウのinnerHTMLとかは分かりやすい。さすがだ(なにが?)createElementとかが、作ってどこにも入ってない(配置されてない)という概念が少し難しいかも知れな…

参照とか繰り返しとか

for (var i = 0; i print(a[i]); }↑のほうが次より理解しやすいようだ。 for (var p in obj) { print(obj[p]); }a[i]でiが変化する様子はイメージできるが、obj[p]でpの変化がイメージしにくい。例えば、二人組にして次の実習をしてもらう。 一人Aに数枚のカ…

オブジェクトの表示

とりあえず: Object.prototype.toString = function() { var s = "{"; for (var p in this) { var v = this[p]; if (v !== undefined) { s += p + "=" + v + ", "; } } s = s.replace(/, $/, ""); return s + "}"; };

繰り返し

「配列内から特定の値を探す」課題に対して: // Eチャンのコード // 配列arは、具体的に与えられていて ar.length = 5 var i = 0; while (i if (x == ar[i]) { print("found"); } else { print("not found"); } i = i + 1; }ナールホド。これはこれでいいん…

JavaScriptの導入

「なんでもプロパティ」のようなことを最初から出すのは得策ではない。 「変数がない」、「変数が未定義」は箱で説明できる。 undefined値とかtypeof演算子、in演算子とかは最初から出してもいいようだ。 ifの例題に時刻により文言を変える挨拶。 絶対値とか…

ErlangとJSONとJavaScript

\ Erlang JSON JavaScript リストの成分 メンバー 要素 要素 マップの成分 要素 メンバー プロパティ

8進数の扱いがチグハグ

リテラル 012 と Number("012")が違うのでビックリ。

JavaScript関係、主に真偽値と条件式

いずれ本編記事にまとめるが、とりあえずこっちにメモ。referece型referece型は内部的使用に限定される型。JavaScriptのアドレス(特に左辺値)のことだが、そもそもアドレスモデルが高水準だから、(base propname)というペア。referenceがオブジェクト参照…

白旗さんのJavaScriptセミナー

コンパクト閉圏や線形論理(線形集合論)をやっている白旗さんが、こんなこともやっていた。→ http://gentzen.math.hc.keio.ac.jp/JavaScript/index.html

タートル・モナド

<html> <head> <title>Turtle Monad</title> <script src="TurtleMonad.js" ></script> <script> var _canvas = null; var _ctx = null; function initCanvas() { _canvas = document.getElementById("canvas"); _ctx = _canvas.getContext('2d'); } </script> <style> #canvas {border: 1px sol…</head></html>